Visual创建一个独立于C 父母的子线程
visual Create a child thread that is independent of parent in C++
我在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;
}
WaitForSingleObject()
将阻止main直到线程完成。如果您想从线程函数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
变量进行访问,示例应仅显示原理。
更新:
如果要在线程结束之前退出main()
,则无法使用线程。
您需要像我在第一条评论中提到的那样创建一个独立的子过程。查找fork()
和exec()
的功能可以执行此操作(我不知道这些方法可能有特定的Winapi方法)。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- c++中的线程池
- 线程之间的布尔停止信号
- 为什么std::async使用同一个线程运行函数
- 用于矢量处理的多个线程
- C++为线程工作动态地分割例程
- Visual创建一个独立于C 父母的子线程