[問題] Threadpool function問題

看板C_and_CPP作者 (令狐瑜)時間8年前 (2016/11/04 04:46), 編輯推噓4(4015)
留言19則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) Linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) g++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) std:thread c++11 問題(Question): 最近在寫一個關於threadpool的作業 我是參考這個人的作法 https://github.com/mbrossard/threadpool/blob/master/src/threadpool.c 不過我是用std:thread, not pthread 我設計的方式就如下: 建立一個class threadpool 在constructor裡面spawn n個thread 然後讓這n個thread去執行一個infinite loop loop裡要做的事情就是檢查task_queue裡面是否有未完成的工作 若有就把工作完成 若無就繼續在while loop spin 我想最普遍的用法 就是先create一個task object(包含function pointer跟parameter) 然後把task放到task_queue裡面 thread就會去拿這個task然後執行function 不過這個作業比這複雜很多 我要執行的function F是在一個大的class A裡面的public function 所以直觀的作法當然是把function F包成一個task放到threadpool的task_queue裡面 可是function F用了很多private variable, private class, private function 而且class threadpool不能寫在class A底下 要額外寫在threadpool.h 所以事情就變得很複雜 因為我沒辦法把要用到的其他function或是variable等等pass給threadpool裡面的thread 想請問該怎麼設計會比較好呢? 我一直很苦惱的點是 threadpool.h裡面的class threadpool要怎樣才看得到class A裡面全部的東西? 有辦法做到這件事情嗎? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 128.61.8.232 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1478205977.A.B38.html

11/04 05:01, , 1F
請問可以用friend嗎? 不太常用這個方法所以不熟
11/04 05:01, 1F

11/04 08:47, , 2F
可以貼自己code讓大家更容易瞭解狀況
11/04 08:47, 2F

11/04 08:47, , 3F
置底文章有一些可以貼code的網站
11/04 08:47, 3F

11/04 10:41, , 4F
你可以試看看學member function 指到 function point 再thr
11/04 10:41, 4F

11/04 10:41, , 5F
ead裡面呼叫這個function point看看 ,請參考tr1:function
11/04 10:41, 5F

11/04 10:44, , 6F
拍謝 沒看到Linux ,只是code稍微複雜的寫法 找一下c++的
11/04 10:44, 6F

11/04 10:44, , 7F
白皮書應該有
11/04 10:44, 7F

11/04 10:49, , 8F
class member function也是function,你把parameter準備
11/04 10:49, 8F

11/04 10:49, , 9F
好就可以了
11/04 10:49, 9F

11/04 10:53, , 10F
11/04 10:53, 10F

11/04 11:02, , 11F
需要看到你的程式碼,才能回答你的問題
11/04 11:02, 11F

11/04 11:02, , 12F
因為要達到你要的目的,作法有很多種
11/04 11:02, 12F

11/04 11:03, , 13F
例如:task怎麼包function F,task_queue具體結構是啥
11/04 11:03, 13F

11/04 11:03, , 14F
這些細節都會影響要怎麼回答你的問題
11/04 11:03, 14F

11/04 20:39, , 15F
補充 我後來是pass member function pointer跟this
11/04 20:39, 15F

11/04 20:40, , 16F
到threadpool的class裡面使用 也有用friend
11/04 20:40, 16F

11/04 20:41, , 17F
code有空我再上傳到Github跟大家分享
11/04 20:41, 17F

11/04 20:57, , 18F
把threadpool_task_t換成std::function或packeged_task
11/04 20:57, 18F

11/04 21:56, , 19F
STD bind 就好
11/04 21:56, 19F
文章代碼(AID): #1O6w8Piu (C_and_CPP)