給定對象x,我想啓動一個新線程來調用x.a()
甚至x.a(1,2,3)
。我可以使用boost::thread
爲非成員函數執行此操作;但我如何爲會員功能做到這一點?我如何通過this
指針?一般來說,有很多STL和Boost代碼和模板將代碼作爲參數,但是,由於這不是真正在C++中定義的(函數不是一級vals,本地lambda支持)我很困惑他們是如何定義的。我可以做試驗和錯誤,但我想要更清潔的人,更可靠。C++ Boost.Thread:傳遞對象的方法
更新:我的問題主要涉及傳遞一個方法;當我嘗試做什麼將是明顯的語法(ClassName::method_name, instance)
我得到invalid use of non-static member function
error: no matching function to call
。如果你能夠在非靜態方法中顯示使用Boost.thread的正確語法,這將有所幫助。
UPDATE 2:我發現我爲什麼要爲此而苦苦掙扎。給出的答案,比如@OrDinari,適用於boost::thread
。但是,當我嘗試使用thread_group
,就是thread_group::create_thread
,我得到這個錯誤:
error: no matching function for call to ‘boost::thread_group::create_thread(void (C::*)(), C*)’
所以:
- 爲什麼它的根單絲工作,但不是線程組?
- 如何在組中創建線程來運行成員函數?
C++確實具有原生lambda支持。 – Puppy
如果你是一個原始的野蠻人,你也可以使用boost :: bind。 – Puppy
這已經在StackOverflow –