起thread時,運行報錯terminate called without an active exception

I am getting a C++ error with threading:ios

terminate called without an active exception Aborted

How to reproduce that error:c++

 1 #include <iostream>
 2 #include <stdlib.h>
 3 #include <string>
 4 #include <thread>
 5 using namespace std;
 6 void task1(std::string msg){
 7   cout << "task1 says: " << msg;
 8 }
 9 int main() { 
10   std::thread t1(task1, "hello"); 
11   return 0;
12 }

Compile and run:this

el@defiant ~/foo4/39_threading $ g++ -o s s.cpp -pthread -std=c++11
el@defiant ~/foo4/39_threading $ ./s
terminate called without an active exception
Aborted (core dumped)

You get that error because you didn't join or detach your thread.spa

One way to fix it, join the thread like this:線程

#include <iostream>
#include <stdlib.h>
#include <string>
#include <thread>
using namespace std;
void task1(std::string msg){
  cout << "task1 says: " << msg;
}
int main() { 
  std::thread t1(task1, "hello"); 
  t1.join();
  return 0;
}

Then compile and run:code

el@defiant ~/foo4/39_threading $ g++ -o s s.cpp -pthread -std=c++11
el@defiant ~/foo4/39_threading $ ./s
task1 says: hello

The other way to fix it, detach it like this:blog

#include <iostream>
#include <stdlib.h>
#include <string>
#include <unistd.h>
#include <thread>
using namespace std;
void task1(std::string msg){
  cout << "task1 says: " << msg;
}
int main() 
{ 
     {

        std::thread t1(task1, "hello"); 
        t1.detach();

     } //thread handle is destroyed here, as goes out of scope!

     usleep(1000000); //wait so that hello can be printed.
}

Compile and run:進程

el@defiant ~/foo4/39_threading $ g++ -o s s.cpp -pthread -std=c++11
el@defiant ~/foo4/39_threading $ ./s
task1 says: hello

Read up on detaching C++ threads and joining C++ threads.get

 

總之,就是線程還在運行,主進程就退出致使了該錯誤。string

原文連接:https://stackoverflow.com/questions/7381757/c-terminate-called-without-an-active-exception

相關文章
相關標籤/搜索