C++ pthread_create Parameter

C++ pthread_create Parameter

本文关键字:Parameter create pthread C++      更新时间:2023-10-16

我以前使用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);