我正在将应用程序移植到Mac OS X.Mac OS X上的PostThreadMessage等效项
我还需要在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上使用同等功能。
任何旧的集合类和某些线程锁定有什么问题? – trojanfoe
我对Mac OS X相当陌生。我不知道如何在Mac OS X上实现这一点。我只是想在Mac OS X上实现相同的功能。如果可以使用线程锁定,请发布示例。 – doptimusprime
为了更清楚,我添加了代码示例。 – doptimusprime