Je suis en train de porter une application sur Mac OS X.Equivalent PostThreadMessage sous Mac OS X
Je dois également effectuer une tâche sur Mac OS X. Un thread A doit publier un message dans la file d'attente des messages d'un autre thread B. Ce message implique également certains messages personnalisés. Sur un message particulier comme EXIT_LOOP, le thread B sort de la boucle de message.
J'ai lancé la boucle de message pour le thread B en utilisant CFRunLoop.
Maintenant, je ne peux pas trouver comment le thread A peut envoyer un message à fil B.
Dans Windows, cela est possible PostThreadMessage. Il n'y a peut-être pas de port direct vers Mac OS X, mais il doit y avoir un moyen de le faire sur Mac OS X.
Veuillez noter que le thread B ne connaît pas le thread A, mais le thread A connaît le thread B.
Windows code:
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);
Je crois que ce code peut donner plus de clarté. Je veux des fonctionnalités équivalentes sur Mac OS X.
Qu'est-ce qui ne va pas avec n'importe quelle ancienne classe de collection et certains verrous de threads? – trojanfoe
Je ne suis pas familier avec Mac OS X. Je ne sais pas comment y parvenir sur Mac OS X. Je veux juste des fonctionnalités équivalentes sur Mac OS X. Si cela est possible en utilisant le verrouillage de threads, veuillez poster un exemple. – doptimusprime
Pour le rendre plus clair, j'ai ajouté un exemple de code. – doptimusprime