[問題] class member function中使用std::thread

作者: skyHuan (Huan)   2021-06-09 05:58:25
開發平台(Platform): (Ex: Win10, Linux, ...)
Linux
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
std::thread
問題(Question):
最近在實作multithread的時候遇到了一些問題
以下是程式碼,main function呼叫的函式會呼叫兩條thread幫忙做兩個加法運算
https://pastebin.com/GHn0WWmP
執行output結果是預期的37或73沒有問題
但當如果要呼叫thread的函式是class member function的時候就會compiler error
https://pastebin.com/E5vxyxXW
以下是我自己環境(GCC 4.8.5)的報錯
https://pastebin.com/nNem1nAv
我用線上編譯器onlinegdb.com試的error如下:
error: invalid use of non-static member function ‘void ATPG::test(int, int)’
稍微google一下有找到這篇類似問題的解法
https://thispointer.com/c11-start-thread-by-member-function-with-arguments/
但這篇的使用情境是在main function中開一條thread呼叫class member function
我的使用情境是class member function開thread呼叫其他class member function
用上述網站的解法一樣會有很多error
想請問前輩們這種使用情境下該怎麼呼叫thread比較正確
還是這其實是錯誤的使用方式,應該要在main function中開thread比較正確呢?
抱歉比較少multithread的coding經驗,麻煩前輩們賜教了,謝謝!
作者: Lipraxde (Lipraxde)   2021-06-09 06:48:00
用你查到的那篇的方法啊,是有什麼 error?
作者: chengcti (版主請投我一票!)   2021-06-09 09:09:00
class member 前面加上 staticclass 還沒建立 傳進去可能會變成存取不存在的記憶體所以一定要是classstatic member
作者: flarehunter (Range)   2021-06-09 12:07:00
Google "c++ std::thread class method" 第一篇shorturl.at/frstM
作者: Lipraxde (Lipraxde)   2021-06-09 13:45:00
你是第一次寫 C++?錯誤訊息都有,文章裡也有介紹,花點時間看不好嗎?
作者: sarafciel (Cattuz)   2021-06-09 13:58:00
你原本那篇文章是有你要的解的 這邊你要自己學會變通
作者: Lipraxde (Lipraxde)   2021-06-09 22:00:00
其實你一開始就有找到答案了,比較熟 C++ 後可以再回來看看最初的盲點,加油吧~

Links booklink

Contact Us: admin [ a t ] ucptt.com