终止由<thread>标头创建的线程

时间:2017-05-06 13:01:38

标签: c++

我正在制作一个小程序来理解线程的流程。我遇到了运行时错误。我花了2天的时间才发现给出运行时错误的函数,有一个线程在其他地方运行。现在,我需要正确关闭该线程,以便我的主函数可以正常终止。

这是我所做的一个例子;

void main()
{
    int n = fun2();
    cout << n;
}

int fun2()
{
    thread parallel(fun3);
    return 2;
}

void fun3()
{
    while (smth)
    {
        ...
    }
}

fun3()执行文件阅读部分。我读了很多与这个问题有关的问题,但是没有一个问题实际上有用,大多数都是使用HANDLE thingy,我不明白。如果还有其他方法可以同时执行2个函数,我想知道。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您收到运行时错误,因为如果std::thread未加入或已分离,std::terminate()将执行fun2()。您的main函数在没有加入void main() { int n = fun2(); cout << n; } int fun2() { thread parallel(fun3); parallel.join() // wait for the thread to finish return 2; } void fun3() { while (smth) { ... } } 生成的线程的情况下完成。一个简单的修复就是在第二个函数中加入线程,如下所示:

Axios