0

我在一个 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;
}
4

1 回答 1

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 方法,我不知道)。

于 2012-10-25T14:37:15.363 回答