也許有一個非常簡單的解決方案,我的問題,但我真的很困惑與我身邊的所有提升。開始新的線程沒有阻止/等待主要操作
這裏是我的問題:
我要開始一個任務(計算,文件系統操作等),通過調用CallbackReceived
功能的回調系統提出的,我想這種操作傳遞給一個線程,通常由對象的成員函數表示。該線程不能保證完成,所以它應該有一些時間後取消它。
喜歡的東西(不知道這是否是100%正確的):
// ...
MyObject object;
// ...
void CallbackReceived(int parameter) {
boost::thread tThread(&MyObject::calculate, *&object);
boost::asio::deadline_timer tDeadlineTimer(_ioService, boost::posix_time::seconds(2));
tDeadlineTimer.async_wait(boost::bind(DeadlineTimeOut, boost::asio::placeholders::error));
tThread.join();
}
基本上,tThread.join()`的線程的返回等待。在等待期間,我的主人不能收到任何可能因爲被阻止而睡覺的回調。
那麼,在執行操作時,可以運行線程而不是阻止調用初始程序?
...不要調用'join'? ':S' –
你的代碼似乎與你真正做的不一樣,因爲tThread不是像tThread.join()那樣使用它的指針。另外,如果您不想等待線程完成,請不要調用加入。也許未來對你來說是一個更好的工具? – PlasmaHH
@PlasmaHH感謝提示,我錯過了。 – Benjamin