私は次のようなクラスを持っています:
class MyStreamReader
{
public:
MyStreamReader(MyPramameter myPram) {.....}
~MyStreamReader() {}
DWORD WINAPI ReaderThread(LPVOID *lpdwThreadParam )
{
//....
}
};
そして、WinAPICreateThreadを使用してReaderThreadを呼び出したいと思います。しかし、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'
その結果、私の質問は次のようになります。
- boost lib(または他のメソッド)を使用してCreateThreadからクラスの非静的関数を呼び出すことは可能ですか?
- C ++ THREADing librrayがない場合は、これを呼び出すことができます(ビジュアルC ++の場合)-クラスの非静的メンバー関数をスレッドとして実行しますか?
幸運をお祈りしています
アップデート:
したがって、最初の質問:CreateThreadwinAPIから非静的c++メンバー関数を呼び出すことは不可能であるようです...
したがって、C++マルチスレッドlibwhicの推奨事項は、非静的関数をスレッドとして呼び出すことができます...
更新2: まあ私はブーストスレッドライブラリを試してみます...それはうまくいくようです...
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()
{
//....
}
};