postThreadMessage / peekmessage的替代方案?

时间:2014-04-03 15:04:02

标签: c++ multithreading winapi

我的C ++应用程序中有一个(静态)线程,经常做某事。要在线程和我的应用程序之间交换信息,我使用方法PostThreadMessagePeekMessage

由于某种原因,我不能再使用这些方法,但不知道一个好的选择。有人有建议吗?我只想交换简单的参数。

1 个答案:

答案 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指针连接回类的特定实例。