_beginthreadex創建線程,立即執行?


  一個線程創建后,並不是立馬就執行,而是等時間片到來后才執行...

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
#include  <iostream>
#include  <Windows.h>
#include  <process.h>

using   namespace  std;

unsigned   int   _stdcall  ThreadFun( void  *pPM);
long  g_nNum;
const   int  THREAD_NUM =  10 ;
CRITICAL_SECTION g_csThreadCore;
HANDLE hSemaphore;


int  main( void )
{
    g_nNum = 
0 ;
    HANDLE handle[
10 ];
    
int  i =  0 ;

    
//初始化臨界區
    InitializeCriticalSection(&g_csThreadCore);
    
//創建信號量
    hSemaphore = CreateSemaphore( NULL 0 1 NULL );


    
while (i < THREAD_NUM)
    {
        handle[i] = (HANDLE)_beginthreadex(
                        
NULL ,        //第1個參數:安全屬性,NULL為默認安全屬性
                         0 ,           //第2個參數:指定線程堆棧的大小。如果為0,則線程堆棧大小和創建它的線程的相同。一般用0
                        ThreadFun,   //第3個參數:指定線程函數的地址,也就是線程調用執行的函數地址(用函數名稱即可,函數名稱就表示地址)
                        &i,          //第4個參數:傳遞給線程的參數的指針,可以通過傳入對象的指針,在線程函數中再轉化為對應類的指針
                         0 ,           //第5個參數:線程初始狀態,0:立即運行;CREATE_SUSPEND:suspended(懸掛)
                         NULL          //第6個參數:用於記錄線程ID的地址
                    );
        
//直到hSemaphore有信號時,才往下繼續執行,而只有當創建的線程執行時,Semaphore才有信號。
        WaitForSingleObject(hSemaphore, INFINITE);
        i++;
    }

    WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);

    DeleteCriticalSection(&g_csThreadCore);
    CloseHandle(hSemaphore);


    cin >> i;
    
return   0 ;
}


unsigned   int   _stdcall  ThreadFun( void  *pPM)
{
    
int  nThreadnum = *( int  *)pPM;
    ReleaseSemaphore(hSemaphore, 
1 NULL );

    EnterCriticalSection(&g_csThreadCore);
    g_nNum++;

    printf(
"線程編號為%d  全局資源值為%d\n" , nThreadnum, g_nNum);

    LeaveCriticalSection(&g_csThreadCore);
    
return   0 ;
}

  

  參考
  http://blog.csdn.net/shuilan0066/article/details/7683382%20                 
  error C2065: '_beginthreadex' : undeclared identifier 的解決辦法
  CreateThread()與beginthread()的區別詳細解析


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM