윈도우 스레드 동기화

사용 WaitForSingleObject 함수 &와 WaitForMultipleObjects 기능

#INCLUDE <STDIO.H> 
#INCLUDE <WINDOWS.H> 
#INCLUDE <process.h> 
부호 WINAPI ThreadFunc (무효 *의 ARG); 본체 (INT는 argc, 숯불 *는 argv []) 값 int { HANDLE hThread; DWORD의 WR; 서명되지 않은 threadID; INT PARAM = 5; hThread = (HANDLE) _beginthreadex (NULL, 0, ThreadFunc (무효 *) PARAM 0, threadID); 경우 ((= WR의 WaitForSingleObject (hThread, INFINITE)) == WAIT_FAILED) { 둔다 ( "스레드 대기 에러"); 반환 -1; } 의 printf ( "대기 결과 : % S \ n"(WR == WAIT_OBJECT_0) "신호"? "타임 아웃"); ( "마지막 주의") 풋; 0을 반환; 부호 WINAPI ThreadFunc (무효 * ARG) { INT I; * CNT = INT ((INT의 *) ARG); 대 (I = 0; I <CNT; I ++) { 슬립 (1000); ( "스레드를 실행") 풋; } 0을 반환; }

  

#INCLUDE <STDIO.H>
#INCLUDE <WINDOWS.H>
#INCLUDE <process.h>
 
 
#DEFINE의 NUM_THREAD 50
부호 WINAPI threadInc (무효 *의 ARG);
부호 WINAPI threadDec (무효 *의 ARG);
긴 긴 NUM = 0;
 
 
int 주 (int argc, 문자 *는 argv [])
{
    핸들 tHandles [NUM_THREAD];
    I에서 INT;
 
 
    ( "긴 길이를 sizeof % D \ n"는 sizeof (긴 길이))의 printf;
    대 (나는 <NUM_THREAD; 나는 0 = I ++)
    {
        경우 (I % 2)
            tHandles [I] = (HANDLE) _beginthreadex (NULL, 0, threadInc, NULL, 0, NULL);
        그밖에
            tHandles [I] = (HANDLE) _beginthreadex (NULL, 0, threadDec, NULL, 0, NULL);
    }
 
 
 
 
    와 WaitForMultipleObjects (NUM_THREAD, tHandles, TRUE, INFINITE);
    의 printf ( "결과 %의 LLD \ n", NUM);
    0을 반환;
}
 
 
부호 WINAPI threadInc (무효 *의 ARG)
{
    I에서 INT;
    대 (I = 0; I <50000000; I ++)
        A + = 1;
    0을 반환;
}
 
 
부호 WINAPI threadDec (무효 *의 ARG)
{
    I에서 INT;
    대 (I = 0; I <50000000; I ++)
        A - = 1;
    0을 반환;
}

  

추천

출처www.cnblogs.com/wisdomroc/p/11842685.html