我想知道如何解决这个问题。
我注意到CreateThread()
在此代码中效果不佳:
DWORD threadFunc1(LPVOID lParam)
{
int cur = (int)lParam
while(1)
{
//Job1...
//Reason
break;
}
Start(cur + 1);
Sleep(100);
}
void Start(int startNum)
{
....
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)threadFunc1, &startNum, 0, &dwThreadId);
...
}
void btnClicking()
{
Start(0);
}
在此代码中,有一个由Start()
创建的线程,并在线程结束时调用Start()
。
第二个创建的线程不起作用。我认为第一个线程消失了,第二个线程被破坏了。
解决这个问题的最佳方法是什么?
操作系统:赢得7位64位终极版。 工具:Visual Studio 2008。答案 0 :(得分:0)
它不起作用,因为你的代码中有bug。你的线程函数的签名是错误的,你正在以错误的方式将startNum值传递给线程。
请改为尝试:
DWORD WINAPI threadFunc1(LPVOID lParameter)
{
int cur = (int) lParameter;
while(1)
{
//Job1...
//Reason
break;
}
Start(cur + 1);
Sleep(100);
}
void Start(int startNum)
{
....
HANDLE hThread = CreateThread(NULL, NULL, &threadFunc1, (LPVOID) startNum, 0, &dwThreadId);
if (hThread != NULL)
{
// ... store it somewhere or close it, otherwise you are leaking it...
}
...
}
void btnClicking()
{
Start(0);
}