gpt4 book ai didi

c++ - postThreadMessage/peekmessage 的替代方案?

转载 作者:行者123 更新时间:2023-11-28 06:58:39 24 4
gpt4 key购买 nike

我的 C++ 应用程序中有一个(静态)线程,它经常执行某些操作。为了在线程和我的应用程序之间交换信息,我使用方法 PostThreadMessagePeekMessage

由于某些原因,我不能再使用这些方法,但不知道有什么好的替代方法。有人有建议吗?我只是想交换简单的参数。

最佳答案

正如您在评论中所说,您没有理由不能“与主线程交换简单对象”。在线程之间共享类实例的常见模式是执行如下操作:-

使用_beginthread 可以定位的static 函数和完成工作的实例函数声明您的类:

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 ....
}

有道理吗?一般的想法只是使用带有传递的 this 指针的 static 函数连接回类的特定实例。

关于c++ - postThreadMessage/peekmessage 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22841602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com