我正在将应用程序移植到 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。
窗口代码:
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 上的等效功能。