我有这样的代码,我不能因为pthread_create
行编译:
void* gtk_functor::_threaded_run(void* win)
{
Gtk::Window* w = static_cast<Gtk::Window*>(win);
Gtk::Main::run(*w);
delete w;
}
void gtk_functor::operator()(Gtk::Window& win, bool threaded)
{
if (threaded)
{
pthread_t t_num;
pthread_create(&t_num, NULL, (void* (*)(void*))>k_functor::_threaded_run, static_cast<void*>(&win));
}
else
{
Gtk::Main::run(win);
}
}
这海湾合作委员会行:
g++ -o main 'pkg-config --cflags --libs sqlite3 gtkmm-3.0' -lpthread main.cpp
做到底编译输出:
code/ui.cpp: In member function 'void ui::gtk_functor::operator()(Gtk::Window&, bool)':
code/ui.cpp:45:65: warning: converting from 'void* (ui::gtk_functor::*)(void*)' to 'void* (*)(void*)' [-Wpmf-conversions]
,显然该代码不能正常工作,我得到sementation fault
当if (threaded)
提高。
我知道它与演员,但我不知道传递成员函数到pthread_create的正确形式。有什么建议么?
摆脱铸造,使'_threaded_run'静态的。 – ildjarn 2012-07-17 18:35:48
'gtk_functor :: _ threaded_run'不是一个函数。这是一个*成员函数*。要求能够“呼叫”裸体成员功能是没有意义的。必须有一个**对象**,它的成员函数被调用。 – 2012-07-17 18:35:54
另请参阅http://stackoverflow.com/q/1151582/1025391 – moooeeeep 2012-07-17 19:07:14