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

C 프로그램의 Windows 스레드 API

PHPz
풀어 주다: 2023-09-05 19:17:10
앞으로
595명이 탐색했습니다.

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으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿