#include <iostream>
#include <windows.h>
// 线程是一个可等待对象,任何一个可等待对象都存在两种状态,在特定的时候会触发
// 相应的信号,例如线程在结束的时候,会将内核对象置为有信号状态
// 通过等待函数,通常是 WaitForSingleObject 可以等待一个可等待对象,如果
// 对象处于有信号状态,这个函数会直接返回,否则会阻塞程序的执行
// 线程的回调函数,创建线程的时候被用作线程的起始位置
DWORD CALLBACK WorkerThread(LPVOID Paramater)
{
// 作为一个被创建的线程,当主线程[main所在的线程]退出的时候,这些线程无论
// 有没有执行完毕,都会跟着退出
for (int i = 0; i < 100000; ++i)
printf("WorkerThread: %d\n", i);
return 0;
}
int main()
{
// 在主线程中使用函数 CtreateThread 创建一个其它线程,并等待线程执行完毕后退出
HANDLE Thread = CreateThread(NULL, 0, WorkerThread, NULL, 0, NULL);
// 如果线程创建成功,就等待线程执行完毕,否则直接退出,函数的第一个参数是要等待的
// 对象,第二个参数是等待的时长,只有两种情况下函数会返回,第一个是对象等待成功,
// 第二个是等待超时,超过了指定的毫秒数,对象还没有信号
if (Thread) WaitForSingleObject(Thread, INFINITE);
return 0;
}