我有一门课,例如:
class MyStreamReader
{
public:
MyStreamReader(MyPramameter myPram) {.....}
~MyStreamReader() {}
DWORD WINAPI ReaderThread(LPVOID *lpdwThreadParam )
{
//....
}
};
我想用WinAPI CreateThread调用 ReaderThread 。但是 CreateThread 想要 ReaderThread 函数想要一个静态函数。
在某些形式中,据说这可以通过 boost 库实现,例如:
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++ 线程库,您可以推荐(对于可视化 C++),我可以调用运行类的非静态成员函数作为线程?
最好的祝愿
更新:
所以第一个问题:似乎不可能从 CreateThread win API 调用非静态 c++ 成员函数......
因此,对于 C++ 多线程库的任何建议都可以将非静态函数调用为线程......
更新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()
{
//....
}
};