[英]Can C++ std::thread callable's object pointer be invalidated after the thread begins execution?
[英]Can't start C++ std::thread with callable as argument
我想在程序中設置以下類:
我在生成運行回調的 std::thread 時遇到了一些麻煩。 好像我弄錯了它的參數,但我想不通。
最小的可重現示例:
#include <thread>
class MyClass;
class CallbackClass
{
public:
void (MyClass::*callback)();
std::thread a_thread;
void setCallback(void (MyClass::*cb)())
{
callback = cb;
}
void writeCall()
{
a_thread = std::thread(callback); // error here
}
};
class MyClass
{
public:
CallbackClass callbackobject;
MyClass()
{
callbackobject.setCallback(&MyClass::bufferWriter);
}
void bufferWriter(){}
};
int main(){}
我得到的編譯器錯誤:
error: no matching function for call to ‘std::thread::_Invoker<std::tuple<void (MyClass::*)()> >::_M_invoke(std::thread::_Invoker<std::tuple<void (MyClass::*)()> >::_Indices)’
operator()()
在這一行:
a_thread = std::thread(callback); // error here
void (MyClass::*callback)();
這是一個指向類方法的指針。
a_thread = std::thread(callback);
類方法不是可以被自身調用的函數。 類方法需要一個對象來調用它。 您需要從某處存儲或獲取指向MyClass
對象的指針。 例如,您可以將第二個參數傳遞給 setCallback:
void setCallback(void (MyClass::*cb)(), MyClass *ptr)
然后把它藏在某個地方,然后用它來調用類方法。 通常,這將類似於:
a_thread = std::thread(callback, ptr);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.