gpt4 book ai didi

c++ - Mac OS X 上的 PostThreadMessage 等效项

转载 作者:行者123 更新时间:2023-11-28 07:31:59 24 4
gpt4 key购买 nike

我正在将应用程序移植到 Mac OS X。

我也需要在 Mac OS X 上执行以下任务。线程A需要向另一个线程B的消息队列投递消息。这些消息也涉及一些自定义消息。在像 EXIT_LOOP 这样的特定消息上,线程 B 退出消息循环。

我已经使用 CFRunLoop 为线程 B 启动了消息循环。

现在我找不到线程 A 如何向线程 B 发送消息。

在 Windows 中,这是可能的 PostThreadMessage。可能没有为此直接移植到 Mac OS X,但必须有一种方法可以在 Mac OS X 上做到这一点。

请注意,线程 B 不知道线程 A,但线程 A 知道线程 B。

Windows 代码:

MessageLoop () {
MSG message;
BOOL ret;
while(ret = GetMessage(&message, NULL, 0, 0) != 0) {
if(ret == -1)
break;

if(UseMessage(message) = EXIT)
break;

}

}

int UseMessage (MSG Message)
{
switch(Message) {

//Process various messages.

case I_AM_COMPLETE:
return EXIT;

}
}


//Thread A:
MessageLoop ();
//Cleanup

//Thread B:
PostThreadMessage(threadidofA, I_AM_COMPLETE, 0, 0);

我相信这段代码可能会更清晰。我想要 Mac OS X 上的等效功能。

最佳答案

作为一般性建议,您应该对移植工作采取不同的策略。不要试图将 Win32 编码策略“音译”为 Mac 编码策略。从头开始改进您的 Mac 编码技术设计。

无论如何,有多种方法可以实现类似的目标。可能最简单的要求线程 B 使用 NSRunLoop 而不是 CFRunLoop。然后,线程 A 可以使用 -[NSObject performSelector:onThread:withObject:waitUntilDone:] 在线程 B 上运行一个方法。

关于c++ - Mac OS X 上的 PostThreadMessage 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17480924/

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