_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()的区别详细解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值