2012-10-25 48 views
0

我正在C++ DLL模块中工作,我需要为每个X min独立执行一个任务。我试图为该任务创建一个线程,但是创建线程的主程序也将一直等待子线程完成。在C++中创建一个独立于父代的子线程

是否有人可以帮助我如何独立于主程序创建单独的过程(请提供示例代码,如果可能的话)并执行任务? 该过程应该执行一个函数,并为每个X min运行函数中存在的代码。

编辑:直到线程完成

void test(void *param) 
{ 
    cout << "In thread function" << endl; 
    Sleep(1000); // sleep for 1 second 
    cout << "Thread function ends" << endl; 
    _endthread(); 
} 

int main() 
{ 
    HANDLE hThread; 
    cout << "Starting thread" << endl; 
    cout << (hThread = (HANDLE)_beginthread(test,0,NULL)); 
    WaitForSingleObject(hThread, INFINITE); 
    cout << "Main ends" << endl; 
    return 0; 
} 
+1

'CreateThread()'和'beginthreadex()'不要等待线程完成。他们返回一个可用于等待线程完成的句柄。 – hmjd

+1

首先显示你的代码 - 例如启动新线程的代码。 – kuperspb

+0

通常创建线程并不意味着创建线程需要等待它们完成(这就是线程的全部内容!!)。如果你的意思是你的主进程不应该等待退出,你需要创建一个独立运行的子进程( - > fork/exec)。你真的应该显示一些你有的代码和你有问题的地方。 –

回答

0

WaitForSingleObject()将阻止主。如果你想定期从线程函数test()运行一些东西,你需要在那里放一个循环。最好在退出时触发从main()结束线程功能。在您想要退出main()方法之前,您不应该拨打WaitForSingleObject()。因此,您将拥有异步运行的test()方法。

bool endThread = false; 
void test(void *param) 
{ 
    cout << "In thread function" << endl; 
    while(!endThread) 
    { 
     Sleep(1000); // sleep for 1 second 
    } 

    cout << "Thread function ends" << endl; 
    _endthread(); 
} 

int main() 
{ 
    HANDLE hThread; 
    cout << "Starting thread" << endl; 
    cout << (hThread = (HANDLE)_beginthread(test,0,NULL)); 

    // Do any other stuff without waiting for the thread to end 
    // ... 

    endThread = true; 
    WaitForSingleObject(hThread, INFINITE); 
    cout << "Main ends" << endl; 
    return 0; 
} 

请注意,您可能需要同步访问endThread变量正确使用互斥或​​类似的,样品应只显示原理。

UPDATE:

在你想要的线程结束前退出main()情况下,你不能在所有使用线程。

您需要创建一个独立的子进程,就像我在第一条评论中提到的那样。查找fork()exec()函数来做到这一点(这些也可能有具体的WinAPI方法,我不知道)。

+0

我实际上需要独立于main的子线程。我明白,调用WaitForSingleObject会让main等待,直到孩子完成。但是如果我不打电话,我的孩子会因为主要退出而死亡。即使主要退出,我也希望孩子执行。 – TechyHarry