2017-05-06 64 views
1

我想提出一个小程序来了解线程的流程创建的线程。我被困在运行时错误。我花了2天的时间才发现运行时错误的函数有一个线程在其他地方运行。现在,我需要正确关闭该线程,以便我的主函数可以正常终止。终止由<thread>头

这里是什么,我做出了表率;

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

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

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

的FUN3()做的方式文件读取部。我读了与这个问题有关的多个问题,但他们中没有一个实际上有帮助,其中大多数都使用了我不了解的HANDLE琐事。如果还有其他方法可以同时执行2个功能,我想知道。

任何帮助,将不胜感激。

+0

我想,你需要的Thread.join。参加http://en.cppreference.com/w/cpp/thread/thread/thread – user3159253

+0

这2个功能看看例如你想并行运行? 'fun2'和'fun3'? – Galik

+0

@Galik我想运行FUN2()和FUN3()平行,当FUN2()希望他们都应该终止。 user3159253我不想让我的程序等待fun3完成,我想同时运行它们。 – user3762712

回答

0

你得到一个运行时错误,因为std::thread将执行std::terminate()如果没有任何连接或分离。你的主要功能完成,不需要加入fun2()产生的线程。一个简单的修正将刚刚加盟的线程在你的第二个功能,像这样:

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) 
    { 
     ... 
    } 
} 
+0

值得指出的是'fun2()'的工作发生在创建线程和加入之间。 – Galik

+0

多数民众赞成的事情,我不希望它_wait_我想运行FUN2()和FUN3()平行两者应终止时FUN2()想。 – user3762712

+2

@ user3762712只要把在FUN2()'和所有的代码'结束了'FUN2()'创建线程和连接 – Galik