Visual创建一个独立于C 父母的子线程

visual Create a child thread that is independent of parent in C++

本文关键字:父母 线程 独立 一个 创建 Visual      更新时间:2023-10-16

我在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方法)。