在gcc4.4下,采用回調機制寫了一個類似std::thread的線程類。
但是使用時卻發生了核心已轉移的錯誤。
main函數調用的代碼大致是
int main(int argc, char *argv[]) { FuncA(); sleep(10); }
FuncA內涵邏輯會創建一個線程大致邏輯精簡為
void FuncA(){ CallBackThread<T,O> t1(Arg1,Arg2); }
其實這錯誤挺明顯了,但是當時沒看出來,主要是其實能運行
如果注釋掉sleep采用while(true)代替,那么程序正常運行。估計即使釋放掉對象后不關已經在運行的線程什么事情了。但其實線程執行的是該對象的代碼段,很奇怪竟然不用sleep就正常運行。
至於terminate called without an active exception異常是我將編譯器切到gcc-6后,使用std::thread才打印出的異常