C/Visual C - Disparo por eventos

   
Vista:

Disparo por eventos

Publicado por Jorge (31 intervenciones) el 24/01/2016 14:39:52
Hola a todos:

Me gustaría saber si es posible la rutina de un programa se quede bloqueada hasta que sea disparada por un evento de otro hilo del proceso ó por otro proceso ?

Cuando busco en internet información acerca de este veo que hay muchas referencias y documentación relacionada con la función read de un socket, pero yo en mi proceso no tengo sockets.

En concreto lo que quiero hacer son dos cosas:

- Una rutina se quede esperando hasta que en un directorio aparezca un fichero.
- Un proceso "A" se quede esperando hasta que un proceso "B" ejecute una determinada funcion y envíe una orden al proceso "A" para que este continúe.

Hasta ahora lo que si se hacer es que la rutina del proceso "A" se quede en un bucle infinito y en cada pasada de este compruebe el directorio y una posicion de la memoria compartida por la que ahora se comunican el proceso "A" y "B". El problema es que esto consume muchos recursos si las pasadas del bucle son demasiado seguidas ó de lo contrario si entre pasada y pasada pongo un sleep, puedo llegar a tardar demasiado tiempo en detectar el evento del proceso "B"

¿ Es posible hacer esta "comunicación" entre procesos de la forma que propongo ?
¿ Como se hace ?


Muchas gracias de antemano por su ayuda

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Disparo por eventos

Publicado por agustin (173 intervenciones) el 24/01/2016 23:30:24
Si pones un sleep muy pequeño puedes solucionarlo. Es cuestión de probar pero en mi caso un sleep(1) es suficiente para que no se ponga el procesador a tope.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Disparo por eventos

Publicado por Tom (479 intervenciones) el 25/01/2016 09:00:05
No es lo mismo comunicar procesos entre sí que comunicar hilos de un mismo proceso ...
Ni existen los mismos mecanismos en Window$ que en Linux o en OsX ...

Echa un vistazo a los diversos mecanismos IPC que proporcione tu S.O o tu compilador ...

https://en.wikipedia.org/wiki/Inter-process_communication

O, si utilizas sockets, deberás hacer poll() o select(), o algún otro sistema de esperas pasivas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Disparo por eventos

Publicado por nn (1 intervención) el 25/01/2016 18:09:31
investiga sobre Event, Mutex, Semaphore, WaitForSingleObject
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar