2019年6月2日 星期日

C++ local thread

在C++中區域變數在離開scope的時候就會被釋放
所以當在fonction中直接開thread, 一但離開function,該thread就會被釋放掉
ex:
void MyFun()
{
    std::thread myThread(&ThisClass::RuningFun, this);
}



這樣 MyFun()結束之後就會想要釋放還在跑的myThread, debugger就會報錯,而且報得錯完全沒提到thread有問題,也不是在離開function的那行,可能是GC之類的機制一運作就會報錯吧@@?
這時候叫 myThread的主thread會死掉,但是myThread還活著

解決方法之一是把  myThread 變成一個member 而且最好是存 pointer, 否則下次將myThread取代為另一個thread的時候還是有可能會報錯

class MyClass
{
...
    std::thread * pMyThread;
...
}

void MyFun()
{
    pMyThread = new std::thread(&ThisClass::RuningFun, this);
}

這樣就沒問題了



沒有留言:

張貼留言