首页 > 编程语言 > 详细

C++多线程1

时间:2017-01-01 11:42:00      阅读:242      评论:0      收藏:0      [点我收藏+]
一个多线程的实例
#include "stdafx.h"
#include <windows.h>
DWORD __stdcall Func(LPVOID pm)
{
    printf_s("this is a thread , id = %d \n" , GetCurrentThreadId());
    return 0;
}
int main()
{
    HANDLE h = CreateThread(NULL, 0, Func, NULL, 0, NULL);
    WaitForSingleObject(h, INFINITE);

    system("pause");
    return 0;
}

 

运行结果如下

技术分享

CreateThread 函数原形

HANDLE WINAPI CreateThread(

  LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程内核对象的安全属性,NULL为默认设置

  SIZE_T dwStackSize,//线程栈空间大小。0表示使用默认大小(1MB)

  LPTHREAD_START_ROUTINE lpStartAddress,//线程函数地址

  LPVOID lpParameter,//线程函数的参数

  DWORD dwCreationFlags,//额外的标志来控制线程的创建,0表示立即执行

  LPDWORD lpThreadId//线程的id号,NULL表示不需要返回  

);

函数返回线程的句柄

 

WaitForSingleObject 函数原形

DWORD WINAPI WaitForSingleObject(

  HANDLE hHandle,  //内核对象句柄

  DWORD dwMilliseconds //最长等待的时间,以毫秒为单位,如1000就表示1秒,传入0就立即返回,传入INFINITE表示无限等待。

);

WaitForSingleObject可以等待一个内核对象的触发,因为线程在运行的时候是未触发的,线程结束,线程对象处于触发状态,所以可以用

WaitForSingleObject(h, INFINITE);

等待一个线程执行完毕,

函数返回,

WAIT_OBJECT_0 对象在等待时间内触发

WAIT_TIMEOUT 对象在等待时间内未触发

WAIT_FAILED 参数错误

可以用下面的代码来判断一个线程是否正在运行状态

bool IsRuning()
{
    //运行检测
    if (m_hThreadHandle==NULL) return false;
    if (WaitForSingleObject(m_hThreadHandle,0)!=WAIT_TIMEOUT) return false; //传0表示立即返回,WAIT_TIMEOUT表示对象未触发,也就是线程未停止
    return true; 
}

 


 

C++多线程1

原文:http://www.cnblogs.com/July7th/p/6240828.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!