C_and_CPP 板


LINE

開發平台(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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1486390827.A.ADF.html
1F:推 phishingphi: 剛好看到 Item 36 的人路過... 02/07 00:21
2F:→ Caesar08: 有甚麼不滿的嗎? 02/07 00:22
3F:→ phishingphi: 不過寫死100ms這樣不就沒什麼彈性,你確定 runtime 02/07 00:25
4F:→ phishingphi: 系統 loading 一變化或如何這段code還符合你的預期嗎 02/07 00:28
5F:→ phishingphi: 我也是剛接觸 Concurrency API 的新手,只是剛看有這 02/07 00:29
6F:→ phishingphi: 樣的疑問而已... 02/07 00:29
7F:推 ilikekotomi: 如果失敗的話有需要做什麼處理嗎? 可以用callback 02/07 01:37
8F:→ ilikekotomi: 比方說DoSomethingWrapper(原本參數...,Callback) 02/07 01:40
9F:→ ilikekotomi: 實作為error = DoSomeThing(參數); callback(error); 02/07 01:41
我覺得Callback好像也行不通?? 因為Dosomething那邊如果成功就會卡在那行了 這樣Callback是否能夠運作呢??
10F:→ ilikekotomi: 如果有事情是確定成功才能做的 這樣我只想得到wait 02/07 01:50
11F:→ uranusjr: 寫一個 wrapper 在有錯誤時拋 exception 這樣可行嗎 02/07 02:02
12F:→ uranusjr: 仔細想想好像也不用, 把 error code 存在某個地方就好 02/07 02:04
13F:→ Clangpp: to uranusjr大 effective modern c++ item 36好像有說 02/07 09:34
14F:→ Clangpp: thread 無法接到你拋的exception不過我不知道你的wrapper 02/07 09:35
15F:→ Clangpp: 要怎樣設計就是了 02/07 09:35
16F:→ Caesar08: 用current_exception與rethrow_exception 02/07 09:52
17F:→ Caesar08: 就可以跨thread傳exception 02/07 09:53
這個方案我擔心會不會問題也出在成功時直接卡在DoSomething那邊 所以基本上所有的問題應該都是出在廠商本身的API上... ※ 編輯: Clangpp (59.124.167.226), 02/07/2017 11:25:55
18F:→ ilikekotomi: 我原本想說callback是有錯才要處理的 02/07 20:34
19F:→ ilikekotomi: 如果沒回傳錯誤沒進callback似乎也沒關係 02/07 20:34
20F:→ ilikekotomi: 但關鍵就在成功的話有沒有需要執行什麼程式 02/07 20:35
21F:推 TeaEEE: 非同步func用parallel_invoke應該相對簡單 02/08 14:43
22F:推 Schottky: 推簽名檔 02/08 21:26







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP