[問題] 使用C++11/14並行 function的選擇請益
開發平台(Platform): (Ex: Win10, Linux, ...)
Windows
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VC 2015
各位版友大家好,小弟我最近有個問題想要請教。
事情是這樣的。
小弟我目前在工作上遇到一個情況
用一個人家廠商提供的API int dosomething(參數不重要);
使用這個API時,如果是成功的話,他會直接卡在這個function直到連線中斷或是下中斷。
這樣會讓我在程式中,無法繼續做其他的事情。
失敗的話,會立刻回傳一個int 的error code訊息來告訴你。
這很明顯的就是要用一個thread去做處理。
於是小弟我就使用了一個std::thread接這個function
然後再做detach
但是我發現假設失敗的話無法拿到正確的error code你必須將error code寫在參數中
可是介面是寫死的無法動
所以小弟我現在的解法是這樣
用一個future
auto f = async(std::launch::async, dosomething, 參數...);
然後
atuo status = f.wait_for(100ms);
//代表他馬上拋出錯誤訊息
if(status != std::future_status::timeout)
{
return f.get();
}
以上使用async的解法是否恰當?? 是否有其他更好的做法??
謝謝
--
法老就預備他的車輛,帶領軍兵同去。埃及人追趕他們,法老一切的戰車就在他們安營
的地方追上了。他們對摩西說:你把我們帶來死在曠野嗎?你為甚麼這樣待我們,將我
們從埃及領出來呢?摩西向天空伸出無線電天線呼叫空中打擊,耶和華便用以色列空軍
F-16攜帶近接空中支援彈藥出擊。呼嘯而過的戰機在一小時內癱瘓了法老的戰車,連一
個也沒有賸下。以色列人看見埃及人的死屍都在海邊了。就敬畏耶和華、又信服他和他
的僕人摩西 。 《舊約聖經‧出埃及記‧14章》
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.166.219.147
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1486390827.A.ADF.html
推
02/07 00:21, , 1F
02/07 00:21, 1F
→
02/07 00:22, , 2F
02/07 00:22, 2F
→
02/07 00:25, , 3F
02/07 00:25, 3F
→
02/07 00:28, , 4F
02/07 00:28, 4F
→
02/07 00:29, , 5F
02/07 00:29, 5F
→
02/07 00:29, , 6F
02/07 00:29, 6F
推
02/07 01:37, , 7F
02/07 01:37, 7F
→
02/07 01:40, , 8F
02/07 01:40, 8F
→
02/07 01:41, , 9F
02/07 01:41, 9F
我覺得Callback好像也行不通?? 因為Dosomething那邊如果成功就會卡在那行了
這樣Callback是否能夠運作呢??
→
02/07 01:50, , 10F
02/07 01:50, 10F
→
02/07 02:02, , 11F
02/07 02:02, 11F
→
02/07 02:04, , 12F
02/07 02:04, 12F
→
02/07 09:34, , 13F
02/07 09:34, 13F
→
02/07 09:35, , 14F
02/07 09:35, 14F
→
02/07 09:35, , 15F
02/07 09:35, 15F
→
02/07 09:52, , 16F
02/07 09:52, 16F
→
02/07 09:53, , 17F
02/07 09:53, 17F
這個方案我擔心會不會問題也出在成功時直接卡在DoSomething那邊
所以基本上所有的問題應該都是出在廠商本身的API上...
※ 編輯: Clangpp (59.124.167.226), 02/07/2017 11:25:55
→
02/07 20:34, , 18F
02/07 20:34, 18F
→
02/07 20:34, , 19F
02/07 20:34, 19F
→
02/07 20:35, , 20F
02/07 20:35, 20F
推
02/08 14:43, , 21F
02/08 14:43, 21F
推
02/08 21:26, , 22F
02/08 21:26, 22F