呼叫一個dll , 里面會回呼我的函式, 我看回呼函式與主執行緒是同一個執行緒
問題:
1. 回呼函式里寫日志會崩潰
2. 是否應該用一個死回圈防止main 退出??
MyLog logger = MyLog(); // 全域
void runstr(void* pSty) // 回呼函式
{
Strategy* s = (Strategy*)pSty;
std::cout << "callback thread id: " << std::this_thread::get_id() << std::endl;
logger.info("Test"); // 會崩潰
}
int main() {
CGetValue cgvObj;
cgvObj.Subscribe(runstr); // 注冊回呼函式 runstr, 它會周期性地被呼叫, 比如 每秒一次
std::cout << "Main thread id: " << std::this_thread::get_id() << std::endl;
cgvObj.addcl(s, s->allMetaData[0], s->allMetaData.size());
cgvObj.Init(); // 開始執行
while(true) { // 這里是不是要用一個死回圈防止退出?
}
}
uj5u.com熱心網友回復:
簡單點可以while(true) { sleep(5); } sleep幾秒鐘防止退出,但是你這個回呼函式在主執行緒里呼叫就不合適了,因為sleep會阻塞主執行緒,所以你應該單獨起一個執行緒來執行上面的邏輯。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/248228.html
標籤:C++ 語言
