У меня есть такой класс:
class MyStreamReader
{
public:
MyStreamReader(MyPramameter myPram) {.....}
~MyStreamReader() {}
DWORD WINAPI ReaderThread(LPVOID *lpdwThreadParam )
{
//....
}
};
и я хочу вызвать ReaderThread с WinAPI CreateThread . Но CreateThread хочет, чтобы функция ReaderThread хотела статическую функцию.
В некоторых формах говорят, что это возможно с помощью библиотеки повышения, такой как :
CreateThread(NULL, 0, boost::bind(&MyStreamReader::ReaderThread,this),
(void*)&myParameterObject), 0, NULL);
Но я получил ошибку компиляции:
'CreateThread' : cannot convert parameter x from 'boost::_bi::bind_t<R,F,L>'
to 'LPTHREAD_START_ROUTINE'
Итак, в результате мои вопросы:
- Можно ли вызывать нестатическую функцию класса из
CreateThread с использованием boost lib (или любого другого метода)
- Если нет какой-либо библиотеки C ++ THREADing, вы можете порекомендовать (для Visual C ++), что я могу вызывать нестатическую функцию-член класса как поток?
С наилучшими пожеланиями
Обновление:
Итак, первый вопрос: кажется, что нельзя вызывать нестатическую функцию-член c ++ из winThid API CreateThread ...
Таким образом, любые рекомендации для многопоточной библиотеки C ++, которые могут вызывать нестатические функции как потоки ...
Обновление 2:
Ну, я попробую увеличить поток lib ... кажется, это работает ...
MyStreamReader* streamReader = new MyStreamReader(myParameters);
boost::thread GetStreamsThread
( boost::bind( &MyStreamReader::ReaderThread, streamReader ) );
или (без привязки)
boost::thread GetStreamsThread(&MyStreamReader::ReaderThread, streamReader);
И чтобы использовать boost :: thread, я обновляю определение своего класса следующим образом:
class MyStreamReader
{
public:
MyStreamReader(MyPramameter myPram) {.....}
~MyStreamReader() {}
void ReaderThread()
{
//....
}
};