我的C ++应用程序中有一个(静态)线程,经常做某事。要在线程和我的应用程序之间交换信息,我使用方法PostThreadMessage
和PeekMessage
。
由于某种原因,我不能再使用这些方法,但不知道一个好的选择。有人有建议吗?我只想交换简单的参数。
答案 0 :(得分:1)
您没有理由不能像在评论中所说的那样"用主线程" 交换简单对象。在线程之间共享类实例的常见模式是执行以下操作: -
使用static
函数声明您的类,该函数可以由_beginthread
和执行该工作的实例函数作为目标:
class CMyClass
{
// ... other class declarations ...
private:
static void __cdecl _ThreadInit(void *pParam); // thread initial function
void ThreadFunction(); // thread instance function
void StartThread(); // function to spawn a thread
// ... other class declarations ...
};
定义类似这样的函数:
void CMyClass::StartThread()
{
// function to spawn a thread (pass a pointer to this instance)
_beginthread(CMyClass::_ThreadInit, 0, this);
}
void __cdecl CMyClass:_ThreadInit(void *pParam)
{
// thread initial function - delegate to instance
CMyClass *pInstance = (CMyClass*)pParam;
pInstance->ThreadFunction();
}
void CMyClass:ThreadFunction()
{
// thread instance function is running on another
// thread but has (hopefully synchronised) access
// to all of the member variables of the CMyClass
// that spawned it ....
}
有道理吗?一般的想法是使用static
函数和传递的this
指针连接回类的特定实例。