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
Thread principal
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 }
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.
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);
Par contre RunLoopSourcePerformGPS n'est jamais appelée en réponse au CFRunLoopSourceSignal() du thread principal...
Partager