0

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

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

第二个创建的线程不起作用。我认为第一个线程消失了,第二个线程被破坏了。

解决这个问题的最佳方法是什么?

操作系统:Win 7 64bit Ultimate。工具:Visual Studio 2008。

4

1 回答 1

0

它不起作用,因为您的代码中有错误。您的线程函数的签名是错误的,并且您以错误的方式将 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);
}
于 2013-08-06T03:44:59.263 回答