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