tpierron | Oué, c'est relativement simple d'envoyer un signal à une appli Win32. C'est juste que Microsoft utilise une API complètement différente. Quand on y regarde de plus près c'est pas si différent que ça des API Posix.
La base en Win32, c'est le handle. Ça représente un descripteur sur tout et n'importe quoi, fenêtre, thread, process, mutex, semaphore, pipe, socket, fichiers, ... Tu as une fonction magique pour savoir s'il y a eu du changement sur un handle : WaitForSingleObject (et la toute famille associée). Le terme "changement" dépend évidemment de ton objet. Un thread et un process, c'est lorsqu'il quitte. Un mutex c'est lorsque tu obtiens le lock, une sémaphore, c'est lorsque l'entier est >0, etc ... vois la doc de WaitForSingleObject.
Donc tu peux faire ça avec une sémaphore, du genre :
Processus en attente de signal :
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- int main()
- {
- HANDLE sem = CreateSemaphore(NULL, 0, 1000, "MY_SEMAPHORE" );
- switch (WaitForSingleObject(sem, INFINITE)) {
- case WAIT_OBJECT_0:
- fprintf(stderr, "J'ai recu un signal d'une autre appli...\n" );
- break;
- case WAIT_TIMEOUT:
- fprintf(stderr, "Timeout ...\n" );
- break;
- case WAIT_ABANDONED:
- fprintf(stderr, "Deja recu ...\n" );
- break;
- }
- return 0;
- }
|
Processus qui envoie le signal :
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- int main()
- {
- HANDLE sem = CreateSemaphore(NULL, 0, 1000, "MY_SEMAPHORE" );
- fprintf(stderr, "Le process en attente va recevoir un signal ....\n" );
- Sleep(1000);
- ReleaseSemaphore(sem, 1, NULL);
- return 0;
- }
|
|