我正在將應用程序移植到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