zoukankan      html  css  js  c++  java
  • 起thread时,运行报错terminate called without an active exception

    I am getting a C++ error with threading:

    terminate called without an active exception
    Aborted

    How to reproduce that error:

     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:

    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.

    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:

    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:

    #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.

    总之,就是线程还在运行,主进程就退出导致了该错误。

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

  • 相关阅读:
    箭头函数中的this
    剑指offer(十六) 合并两个排序的链表
    http中的referer
    剑指offer(十四,十五)链表中倒数第k个结点,反转链表
    剑指offer(十二,十三) 数值的整数次方,调整数组顺序使奇数位于偶数前面
    那些短小精悍的&奇葩的&令人感到惊讶的JavaScript代码----更新中
    对箭头函数的补充
    Promise和Async/Await用法整理
    Vue父子组件互相通信实例
    Vue实例里面的data属性为什么用函数返回
  • 原文地址:https://www.cnblogs.com/ranson7zop/p/8028799.html
Copyright © 2011-2022 走看看