一个线程创建后,并不是立马就执行,而是等时间片到来后才执行...

 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;
;
CRITICAL_SECTION g_csThreadCore;
HANDLE hSemaphore;

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

//初始化临界区
    InitializeCriticalSection(&g_csThreadCore);
    //创建信号量
, NULL);

while(i < THREAD_NUM)
    {
        handle[i] = (HANDLE)_beginthreadex(
                        NULL,       //第1个参数:安全属性,NULL为默认安全属性
,          //第2个参数:指定线程堆栈的大小。如果为0,则线程堆栈大小和创建它的线程的相同。一般用0
                        ThreadFun,  //第3个参数:指定线程函数的地址,也就是线程调用执行的函数地址(用函数名称即可,函数名称就表示地址)
                        &i,         //第4个参数:传递给线程的参数的指针,可以通过传入对象的指针,在线程函数中再转化为对应类的指针
,          //第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;
    ;
}

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

EnterCriticalSection(&g_csThreadCore);
    g_nNum++;

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

LeaveCriticalSection(&g_csThreadCore);
    ;
}

  

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

_beginthreadex创建线程,立即执行?的更多相关文章

  1. CreateThread与_beginthread, _beginthreadex创建线程的基本概念和区别(1)

    这三个函数都可以创建新的线程,但都是如何创建的呢?当然MSDN文档最权威: Creates a thread to execute within the virtual address space o ...

  2. CreateThread与_beginthread, _beginthreadex创建线程的基本概念和区别

    这三个函数都可以创建新的线程,但都是如何创建的呢?当然MSDN文档最权威: Creates a thread to execute within the virtual address space o ...

  3. Java并发编程:如何创建线程?

    Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...

  4. java核心知识点学习----创建线程的第三种方式Callable和Future CompletionService

    前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...

  5. 利用C++11的function和bind简化类创建线程

    问题引出 当在类中需要创建线程时,总是因为线程函数需要定义成静态成员函数,但是又需要访问非静态数据成员这种需求,来做若干重复性的繁琐工作.比如我以前就经常定义一个静态成员函数,然后定一个结构体,结构体 ...

  6. 使用Java 线程池的利弊及JDK自带六种创建线程池的方法

    1. 为什么使用线程池 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务.请求以某种方式到达服务器,这种方式可能是通过网络协 ...

  7. 使用Callable接口创建线程和使用线程池的方式创建线程

    1.使用Callable接口的方式实现多线程,这是JDK5.0新增的一种创建多线程的方法 package com.baozi.java2; import java.util.concurrent.Ca ...

  8. 【转】Java并发编程:如何创建线程?

    一.Java中关于应用程序和进程相关的概念 在Java中,一个应用程序对应着一个JVM实例(也有地方称为JVM进程),一般来说名字默认是java.exe或者javaw.exe(windows下可以通过 ...

  9. Java中创建线程的三种方式以及区别

    在java中如果要创建线程的话,一般有3种方法: 继承Thread类: 实现Runnable接口: 使用Callable和Future创建线程. 1. 继承Thread类 继承Thread类的话,必须 ...

随机推荐

  1. ES6 async 与 await 实战

    下面来说一说通过async和await方式来辅助请求和封装 首先我们定义一个类,定义一个async方法,才可以使用await class JForm extends React.Component { ...

  2. C语言之基本算法08—去掉最高分去掉最低分求平均值

    // /* ================================================================== 题目:选拔赛中通经常使用这种办法求选手分数,去掉一个最 ...

  3. 【Python 数据分析】module 'numpy' has no attribute 'array'

    安装好Numpy模块后,开始做了几个小测试都可以运行,但是当我创建numpy.py这个文件后 numpy.py import numpy y = numpy.array([[11,4,2],[2,6, ...

  4. JavaScript | 对象详解

    ————————————————————————————————————————————————————————— 对象有哪些(导图) 内建对象 数据封装对象 Object对象 Object.prot ...

  5. Mybatis <if>标签

    格式:<if test=""> sql语句 </if> <select id="selectByName" resultType= ...

  6. Python中给文件加锁

    首先要引入库import fcntl打开一个文件f = open('./test')对该文件加密:fcntl.flock(f, fcntl.LOCK_EX)这样就对文件test加锁了,如果有其他进程要 ...

  7. 检查linux网络的状况

    http://hi.baidu.com/dr_wang/blog/item/2952f7458659c306cefca3cc.html

  8. VS2012安装git

    新安装了vs2012,尝试使用Git,安装过程比较简单,记录下来以备以后查阅.   1. 下载.安装Git 我的系统是Windows 7,需要安装Git for Windows. 下载地址: http ...

  9. php serialize序列化对象或者数组

    serialize序列化对象或者数组 $str=serialize(array('a'=>1,'b'=>2)); echo $str; 输入出a:2:{s:1:"a"; ...

  10. nginx-1.2.7 + tcp_proxy_module手动编译安装

    Nginx开源软件默认没有提供TCP协议的负载均衡,下面记录一下我的安装过程: 1. 下载nginx最新稳定版的源码.可访问:http://www.nginx.org 或 linux命令下载到本地: ...