我在C ++ DLL模块中工作,我需要独立地每X分钟执行一次任务。我试图为任务创建一个线程,但我创建线程的主程序也将继续等待子线程完成。
有人可以帮助我如何独立于主程序创建一个单独的过程(请尽可能提供示例代码)并执行任务吗? 该过程应该采用一个函数并运行函数中存在的代码每隔X分钟。
修改:
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;
}
答案 0 :(得分:0)
WaitForSingleObject()
将阻塞main,直到线程完成。如果你想从线程函数test()
定期运行一些东西,你需要在那里放一个循环。最好有一些条件在退出时触发从main()
结束线程函数。在您要退出WaitForSingleObject()
方法之前,不应致电main()
。因此,您将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
变量的访问权限,示例应该只显示原则。
<强>更新强>
如果您想在线程结束前退出main()
,则根本不能使用线程。
您需要创建一个独立的子进程,就像我在第一条评论中提到的那样。查找fork()
和exec()
函数来执行此操作(对于这些函数可能还有特定的WinAPI方法,我不知道)。