2013-10-12 187 views
-1

您好,我目前正在努力實現在C++中自動註銷了一定的時間在用戶空閒後用戶的計時器。我想要做的是,當用戶輸入命令NotIdleException從main被調用並且運行睡眠15分鐘功能的線程從計時器的開始處重新啓動時C++跨線程異常投擲

定時器的代碼位於這裏 http://pastebin.com/tw1YGcmu

我遇到的問題是我想從主線程調用這個異常,並讓它由定時器線程中的try catch處理。有什麼辦法可以在C++(跨平臺!)中做到這一點?

+0

'升壓:: asio'已有[定時器](http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/overview/timers.html); '的boost :: thread's可以睡覺時被打斷(['線程:: interrupt'(http://www.boost.org/doc/libs/1_54_0/doc/html/thread/thread_management.html#thread。 thread_management.thread.interrupt)),它在被中斷的線程中拋出一個異常。 – dyp

+0

包含在問題相關的代碼,同時努力保持合理的規模。問題或答案中的鏈接是好的,只要問題/答案可以自己站立*沒有鏈接。 – dandan78

+0

你想使用異常來傳遞線程之間的(非例外)消息嗎?請不要這可能是最糟糕的實現方式。 – user2802841

回答

1

我簡要地看着你的代碼,但沒有它如何被調用/使用的例子。

如果您正在尋找一種跨線程傳輸異常的方法,std :: future(在C++ 11中)將在其get()成員函數被調用時傳播一個異常,如果線程填充未來生成一個異常。 std::future::get

你也可以看看std :: condition_variable,它可以通知線程(也是一個C++ 11功能)。

這很難說,因爲有你的代碼將如何使用沒有明確的說法,但我認爲的std :: condition_variable將是你試圖做一個更好的設計。