Bonjour,

Dans une application Carbon qui a un thread principal et un autre secondaire, je cherche à pouvoir faire effectuer des traitements par le thread secondaire sur ordre du thread principal. Mais je n'arrive pas à faire fonctionner cela, la runloop du thread secondaire ne recevant pas l'ordre d'effectuer les traitements.

Une idée pour faire fonctionner cela au vu du code ci-dessous?

Thread secondaire qui effectue les traitements
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
// Mise en place de la source sur le thread secondaire
CFRunLoopSourceContext	contextGPSLocAlt = {0, NULL, NULL, NULL, NULL, NULL, NULL, &RunLoopSourceScheduleGPS, &RunLoopSourceCancelGPS, &RunLoopSourcePerformGPS};
CFRunLoopAddSource(gRunLoopGPS, gRunLoopSourceGPSLocAlt, kCFRunLoopDefaultMode);

void RunLoopSourcePerformGPS(void *info)
{
  code des traitements à effectuer
}
Thread principal
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
// Signale au thread secondaire qu'il faut effectuer les traitements
CFRunLoopSourceSignal(gRunLoopSourceGPSLocAlt);
CFRunLoopWakeUp(gRunLoopGPS);
La mise en place de la runloop sur le thread secondaire se passe bien et RunLoopSourceScheduleGPS ainsi que RunLoopSourceCancelGPS sont bien appelées quand cela est nécessaire.
Par contre RunLoopSourcePerformGPS n'est jamais appelée en réponse au CFRunLoopSourceSignal() du thread principal...