July7th

导航

C++多线程1

一个多线程的实例
#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; 
}

 


 

posted on 2017-01-01 11:27  July7th  阅读(147)  评论(0编辑  收藏  举报