CreateThread在我的代码中不起作用

时间:2013-08-06 03:21:27

标签: 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(NULL, NULL, (LPTHREAD_START_ROUTINE)threadFunc1, &startNum, 0, &dwThreadId);
    ...
}

void  btnClicking()
{
    Start(0);
}

在此代码中,有一个由Start()创建的线程,并在线程结束时调用Start()

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

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

操作系统:赢得7位64位终极版。 工具:Visual Studio 2008。

1 个答案:

答案 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);
}