В подобных случаях полезно использовать нестатические функции-члены как свободные функции, которые принимают this
в качестве первого параметра, например, в вашем случае void MainThreadFunc(Main* this)
.
boost::thread
принимает нулевой функтор, поэтому вам нужно передать ему нулевой функтор, который содержит ссылку на экземпляр GUIMain
и вызовы GUIMain->MainThreadFunc
, которые, как я объяснил выше, были бы чем-то как MainThreadFunc(GUIMain)
.
Boost (и теперь также C ++ с TR1) предоставляет помощники для создания таких функторов, а именно boost::bind
(или, альтернативно, boost::lambda::bind
). Выражение boost::bind(f, arg1, arg2, ...)
означает «вернуть нулевой функтор, который вызывает f(arg1, arg2, ...)
».
При этом вы можете использовать следующее выражение для создания потока:
GUIThread = new boost::thread(boost::bind(&Main::MainThreadFunc, GUIMain))