Возможный дубликат:
функция pthread из класса
У меня есть этот код, который я не могу скомпилировать из-за строки 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);
}
}
Эта строка gcc:
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
статичным. - person ildjarn   schedule 17.07.2012gtk_functor::_threaded_run
не является функцией. Это функция-член. Нет смысла запрашивать возможность вызова голой функции-члена. Должен существовать объект, функцию-член которого вы вызываете. - person Kerrek SB   schedule 17.07.2012