Multithreading CreateThread不';我的代码不起作用

Multithreading CreateThread不';我的代码不起作用,multithreading,mfc,Multithreading,Mfc,我想知道如何解决这个问题 我注意到CreateThread()在这段代码中工作不好: DWORD threadFunc1(LPVOID lParam) { int cur = (int)lParam while(1) { //Job1... //Reason break; } Start(cur + 1); Sleep(100); } void Start(int startNum) {

我想知道如何解决这个问题

我注意到
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。

它无法工作,因为您的代码中有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);
}

在使用MFC的程序中,您应该使用而不是
CreateThread
。嗯,您正在传递一个指向局部变量的指针,然后在thread过程中将其转换为整数。这往往会造成混乱。(另外:您的线程过程声明不正确。请删除
(LPTHREAD\u START\u例程)
强制转换以查看问题所在。)泄漏是原因吗?但在线程结束时,我想它可能会自行终止。我认为传递startNum func是一个错误,但这不是这个问题的主要错误。我想更清楚地知道为什么第二个线程不工作。谢谢你到底什么“不管用”?你需要更具体一些。
CreateThread()
是否返回空句柄?
threadFunc1()
是否未被调用?或者,真正的问题是发生在您尚未显示的线程代码中吗?对于终止的线程,当您使用完它后,仍然必须关闭它的打开句柄以释放它的资源。不工作意味着——CreateThread()中的成功,但在第一个线程的末尾第二个线程消失。这个项目是私有的,所以我不能发布它。对不起,“第二次消失在第一个线程的末尾”-这不是很有帮助。“失踪”到底是什么?目前,您提供的代码是不可编译的,并且您的问题是不可再现的。如果您不能提供真实的代码,那么请提供一个演示相同问题的示例。