一个多线程的实例
#include "stdafx.h" #include <windows.h> DWORD __stdcall Func(LPVOID pm) { printf_s("this is a thread , id = %d " , 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;
}