_beginthreadex创建线程,立即执行?

_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(NULL01NULL);


    
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, 
1NULL);

    EnterCriticalSection(&g_csThreadCore);
    g_nNum++;

    printf(
"线程编号为%d  全局资源值为%d ", nThreadnum, g_nNum);

    LeaveCriticalSection(&g_csThreadCore);
    
return 0;
}

  _beginthreadex创建线程,立即执行?

  参考
  http://blog.csdn.net/shuilan0066/article/details/7683382%20                 
  error C2065: '_beginthreadex' : undeclared identifier 的解决办法
  CreateThread()与beginthread()的区别详细解析