C++ pthread_create Parameter
C++ pthread_create Parameter
我以前使用void*
函数作为pthread_create
的第三个参数,下面是它的样子:
void* nameChange(void*){ ... }
...
pthread_t id;
pthread_create(&id, NULL, nameChange, NULL);
这起到了作用。但是我对代码做了一些更改,需要函数nameChange
成为类MainWindow
的成员。现在唯一的区别是:
void* MainWindow::nameChange(void*)
现在,当把nameChange
作为参数时,我得到了一个错误。上面写着:
error: cannot convert 'MainWindow::nameChange' from type 'void* (MainWindow::)(void*)' to type 'void* (*)(void*)'
我在这里做错了什么?我对线程很陌生,所以任何帮助都将不胜感激!
C函数和C++成员函数之间的区别在于,C函数使用cdecl调用约定,而成员函数使用thiscall的调用约定。不能直接调用成员函数成员函数指针与函数指针的类型不同。
也许这里有一个解决办法
void* callback(void*)
{
MainWindow instance;
instance.nameChange();
}
pthread_create(&id, NULL, callback, NULL);
相关文章:
- Using C++ CryptAPI:CNG Create CSR
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 修复"-Wunused-parameter"取决于预处理器条件的警告
- C++模板错误:"invalid explicitly-specified argument for template parameter"
- Firebase C++VS2018 SDL2-在Firebase::app::create(..)上执行异常处理
- 为什么"types may not be defined in parameter types"
- 如何理解"abstract-declarator containing an ellipsis shall only be used in a parameter-declaration"
- QThread::create 似乎没有将参数传递给函数
- 为什么"non-standard syntax; use '&' to create a pointer to member"在 CTOR 中使用线程?
- QThread::create running on UI Thread
- 空指针(为缺少的输出数组调用的 create() 在 create,文件 /home/m/OpenCV/modules/
- 使用宏替换工厂模式样式 API 中的"create()"函数
- 错误:'create'不是 'cv::Tracker' 的成员
- Gtk::Main 和 Gtk::Application::create 有什么区别?
- 为什么这段代码抱怨"a non-type template parameter cannot have type"?
- 如何抛出"template parameter"类型的异常?
- 如何在开关语句中使用 cin "as a parameter"
- 派生类中函数参数变化的虚函数按常量类型在"function parameter"会破坏虚拟机制吗?
- 在 lambda(parameter) 中为 std::transform with std::sregex_token
- 如何修复此"argument of type incompatible with parameter"错误?