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

 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. 关于JSP乱码问题

    关于jsp乱码问题的解决. 1 最基本的乱码问题. 这个乱码问题是最简单的乱码问题.一般新会出现.就是页面编码不一致导致的乱码. <%@ page language="java&quo ...

  2. STL源码剖析(算法)

    STL中算法是基于迭代器来实现的. 有了容器中迭代器的实现(对operator*.operator++等的重载),STL中大部分算法实现就显得很简单了. 先看一例关于find算法的实现: templa ...

  3. Google 地图 API for Android

    原文:Introduction to Google Maps API for Android 作者:Eunice Obugyei 译者:kmyhy 从健康类 app Runkeeper 到游戏 app ...

  4. 【Linux】VMware上安装Linux操作系统

    Vmware上安装Linux系统 1. 文件菜单选择新建虚拟机 2. 选择经典类型安装,下一步. 3. 选择稍后安装操作系统,下一步. 4. 选择Linux系统,版本选择CentOS 64位. 给虚拟 ...

  5. LoadRunner+Android模所器实现抓包并调试本地服务端

    步骤就是 1:新建LR脚本.协议选择Mobile Application - HTTP/HTML 2:在record里选择第三个:Record Emulator........ 3:  选择下一步后, ...

  6. 特殊文件权限(setuid、setgid 和 Sticky 位)

    可执行文件和公共目录可以使用三种特殊类型的权限:setuid.setgid 和 sticky 位.设置这些权限之后,运行可执行文件的任何用户都应采用该可执行文件属主(或组)的 ID. setuid 权 ...

  7. spoj 694 求一个字符串中不同子串的个数

    SPOJ Problem Set (classical) 694. Distinct Substrings Problem code: DISUBSTR Given a string, we need ...

  8. js 时间对比

    https://www.cnblogs.com/xiangsj/p/7977325.html http://www.jb51.net/article/45560.htm isOverdue (time ...

  9. AssionShop开源B2C电子商务系统-概述(转载)

    今天是个特殊的日子,我在北京房租价格又上了一个新的台阶.在这个日子我准备开始建立一个开源项目,一个B2C行业的EC系统. 一.关于定位 我要做的不只是一个商城,应该说是一个能满足中小型企业建立电子商务 ...

  10. [elk]elastalert邮箱告警

    本次要完成以下任务: 1.源码包安装elasticalert 2.配置邮箱报警 原则: 先很快的通过alert报警发一份邮件,其次了解alert配置文件各个选项 源码安装elasticalert 参考 ...