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)
我从程序的输出中看到,有时线程方法"我的"被执行,有时不会.可能是什么原因?
可能你的主线程在第二个线程被执行之前退出.调用后放置断点CreateThread
.
或者更干净的等待,只需等待使用WaitForSingleObject的第二个线程.这有效地使你的主线程等到"我的"线程完成.
如果CreateThread
由于某种原因失败,你可以调用GetLastError函数之后CreateThread
,它会给你最终的答案.
dwThreadID应该用什么来初始化.
快速浏览以下MSDN产量:
指向接收线程标识符的变量的指针.
归档时间: |
|
查看次数: |
1568 次 |
最近记录: |