zoukankan      html  css  js  c++  java
  • _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;
    }

      

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

  • 相关阅读:
    基本指令
    javascript event(事件对象)详解
    Sass进阶之路,之二(进阶篇)
    Sass进阶之路,之一(基础篇)
    原型链进阶
    数据类型检测
    JavaScript引用类型和值类型
    i.mx6 Android6.0.1分析input子系统:测试
    (三)JNI常用示例
    (二)JNI方法总结
  • 原文地址:https://www.cnblogs.com/MakeView660/p/7434944.html
Copyright © 2011-2022 走看看