>  기사  >  백엔드 개발  >  C 프로그램의 Windows 스레드 API

C 프로그램의 Windows 스레드 API

PHPz
PHPz앞으로
2023-09-05 19:17:10569검색

C 프로그램의 Windows 스레드 API

Threads는 CreateThread() 함수를 사용하여 Windows API에서 생성되며 Pthreads와 마찬가지로 보안 정보, 스택 크기 및 스레드 플래그와 같은 속성 집합이 함수에 전달됩니다. 다음 프로그램에서는 이러한 속성의 기본값을 사용합니다. (기본값은 처음에 스레드를 일시 중단된 상태로 설정하지 않고 오히려 CPU 스케줄러에 의해 실행될 수 있도록 합니다.) 합계 스레드가 생성된 후 상위 스레드는 스레드가 완료될 때까지 기다려야 다음 값을 출력할 수 있습니다. 합산 스레드에 의해 값이 설정되므로 합산합니다. Pthread 프로그램에서는 pthread Join() 문을 사용하여 상위 스레드가 합계 스레드를 기다리도록 합니다. 여기서는 WaitForSingleObject() 함수를 사용하여 Windows API에서 이와 동일한 작업을 수행합니다. 그러면 합산 스레드가 종료될 때까지 생성 스레드가 차단됩니다. 여러 스레드가 완료될 때까지 기다려야 하는 상황에서는 WaitForMultipleObjects() 함수를 사용할 수 있습니다. 함수에는 4개의 매개변수가 전달됩니다.

  • 대기할 객체 수
  • 객체 배열에 대한 포인터
  • 모든 객체가 신호를 받았는지 여부를 나타내는 플래그.
  • 시간 초과 기간(또는 무한)

예를 들어 THandles가 크기 N의 스레드 HANDLE 객체 배열인 경우 상위 스레드는 모든 하위 스레드가 이 명령문을 완료할 때까지 기다릴 수 있습니다 -

WaitForMultipleObjects(N, THandles, TRUE, INFINITE );

Windows API를 사용하는 다중 스레드 C 프로그램입니다.

#include<windows.h>
#include<stdio.h>
DWORD Sum;
/* data is shared by the thread(s) */
/* thread runs in this separate function */
DWORD WINAPI Summation(LPVOID Param){
   DWORD Upper = *(DWORD*)Param;
   for (DWORD i = 0; i <= Upper; i++)
   Sum += i;
   return 0;
}
int main(int argc, char *argv[]){
   DWORD ThreadId;
   HANDLE ThreadHandle;
   int Param;
   if (argc != 2){
      fprintf(stderr,"An integer parameter is required</p><p>");
      return -1;
   }
   Param = atoi(argv[1]);
   if (Param < 0){
      fprintf(stderr,"An integer >= 0 is required</p><p>");
      return -1;
   }
   /* create the thread */
   ThreadHandle = CreateThread( NULL, /* default security attributes */ 0, /* default stack size */    
   Summation, /* thread function */ &Param, /* parameter to thread function */ 0, /* default creation    flags */ &ThreadId);
   /* returns the thread identifier */
   if (ThreadHandle != NULL){
      /* now wait for the thread to finish */ WaitForSingleObject(ThreadHandle,INFINITE);
      /* close the thread handle */
      CloseHandle(ThreadHandle);
      printf("sum = %d</p><p>",Sum);
   }
}

위 내용은 C 프로그램의 Windows 스레드 API의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제