WINAPI CreateThread并不总是运行线程

use*_*934 1 c++ windows winapi multithreading visual-studio

我正在尝试使用Windows CreateThread API创建和执行一个线程.我发现运行该程序会产生非确定性行为.我从程序的输出中看到,有时线程方法"我的"被执行,有时不会.可能是什么原因?该程序非常简单,如下所示.dwThreadID应该用什么来初始化.应该是0还是任何整数值?PS:在Visual Studio中编译.

#include "stdafx.h"
#include <iostream>  
#include <windows.h>  
using namespace std;

// DWORD WINAPI   
DWORD  WINAPI my (LPVOID lpParam ) {  
    for (int i = 0; i < 5;i++){  
        cout << "I am ";  
    } 
    return 0; 
} 

int main()  
{
    DWORD dwThreadID = 0;   
    DWORD dwThrdParam = 0;  
    HANDLE h = NULL; 
    h = CreateThread(
            NULL,              // default security
            0,                 // default stack size
            my,        // name of the thread function
            0,              // no thread parameters
            0,                 // default startup flags
            &dwThreadID); 
     if (h == NULL){  
         cout <<"It is null";
     }      
    cout << " BBBB" << endl ;  
    CloseHandle(h); 
    cout << "BBBB "; 
    return 0;  
}
Run Code Online (Sandbox Code Playgroud)

rko*_*egi 5

我从程序的输出中看到,有时线程方法"我的"被执行,有时不会.可能是什么原因?

可能你的主线程在第二个线程被执行之前退出.调用后放置断点CreateThread.

或者更干净的等待,只需等待使用WaitForSingleObject的第二个线程.这有效地使你的主线程等到"我的"线程完成.

如果CreateThread由于某种原因失败,你可以调用GetLastError函数之后CreateThread,它会给你最终的答案.

dwThreadID应该用什么来初始化.

快速浏览以下MSDN产量:

指向接收线程标识符的变量的指针.