Estás en: Inicio >> Foros >> Informática >> Programación
Programación /

[C/C++] semaforos, señales, etc..

Participa en el tema [C/C++] semaforos, señales, etc.. en el foro Programación.
después de un par de horas buscando sin encontrar nada.. me gustaría saber algo sobre ...

Buscar en este tema:
 
  •  
    SePHi escribió hace 1 año
     
    ¿Mensaje inapropiado?
    #1 [C/C++] semaforos, señales, etc..
    después de un par de horas buscando sin encontrar nada.. me gustaría saber algo sobre las funciones que hay en windows para utilizar este tipo de cosas..

    básicamente mi problema es que necesito dormir un proceso esperando un evento de ratón o de tiempo, etc.. en C (no en C++) y eso en linux a lo mejor podría hacerlo con funciones como wait() signal() kill().. con semáforos.. o cualquier cosa.. pero es que no sé el equivalente en windows de todas estas cosas, si lo hay.. y supongo que tiene que haberlo..

    si alguién sabe de esto se lo agradecería un montón.. todo lo que encuentro o es de C++ o es de linux.. :S
    +
     
    0
    Me gusta
     
    | Más
  • #2 Re: semaforos, señales, etc..

    ¿Eh? Los programas de Windows justamente lo que hacen es “dormir” hasta que sucedan eventos (de mouse, de tiempo, etc.) ante los que reaccionan. De eso se trata la event-driven programming... Si no podés hacer eso, necesitás aprender lo básico de programación en Windows.

    Por otro lado, el segundo resultado en google de “semaphores winapi“ (¿par de horas buscando? ) lleva a → http://msdn.microsoft.com/en-us/libr...46(VS.85).aspx

    Pero los semáforos sirven para sincronizar threads y procesos, y responden a otra clase de eventos en los que no estás interesado (inserción de elementos en queues y mailboxes, etc...).
    Me gusta este mensaje
  • #3 Re: semaforos, señales, etc..

    Originalmente publicado por pangus Ver mensaje
    ¿Eh? Los programas de Windows justamente lo que hacen es “dormir” hasta que sucedan eventos (de mouse, de tiempo, etc.) ante los que reaccionan. De eso se trata la event-driven programming... Si no podés hacer eso, necesitás aprender lo básico de programación en Windows.
    ¿pero eso sin programación a objetos? ¿en un programa normal de C?
    la verdad es que no sé como programar ese tipo de cosas.. suelo programar en linux y eso no me suena de nada, pero quería hacer un juego que pudiera usar la mayoría de la gente que conozco.. y para eso necesito windows..

    Originalmente publicado por pangus Ver mensaje
    Por otro lado, el segundo resultado en google de “semaphores winapi“ (¿par de horas buscando? ) lleva a → http://msdn.microsoft.com/en-us/libr...46(VS.85).aspx
    bueno.. te aseguro que llevo un par de horas buscando cosas como signal, kill, "dormir proceso" semaforo, etc.. , nunca supe muy bien que era lo que quería decir winapi.. y ya he estado en la página de MSDN.. puede incluso que haya visto esa entrada, pero me suena todo a C++ hay muchas cosas que no entiendo.. y eso de las "clases", ¿es algo que exista en C normal..?

    Originalmente publicado por pangus Ver mensaje
    Pero los semáforos sirven para sincronizar threads y procesos, y responden a otra clase de eventos en los que no estás interesado (inserción de elementos en queues y mailboxes, etc...).
    bueno, uso una librería que se llama allegro.. no sé si te suena, la elegí porque es muy portable, y me proporciona funciones gráficas bastante buenas. También puedo definir funciones para el tratamiento de dichos eventos.. lo único que quiero es dormir el proceso pricipal con el equivalente a wait() y en dichas funciones hacer un signal() para despertarlo! o hacer un down() y luego un up() desde la funcion de tratamiento de interrupción... nada del otro mundo.. pero sigo sin encontrar la forma de hacerlo en windows..

    bueno, gracias por la respuesta y espero que comprendas que necesitaba escribir.. un saludo!

    bueno, creo que ya he conseguido lo que necesitaba, por si a alguien le ocurre lo mismo que a mi en el futuro las páginas que más me han ayudado:

    http://asignaturas.diatel.upm.es/ffa...oncurrente.pdf
    http://www.driverop.com.ar/tutoriale.../capitulo9.htm
    http://msdn.microsoft.com/es-es/libr...38(en-us).aspx
    http://msdn.microsoft.com/es-es/libr...us,VS.85).aspx

    Me gusta este mensaje
  • #4 Re: semaforos, señales, etc..

    Originalmente publicado por SePHi Ver mensaje
    ¿pero eso sin programación a objetos? ¿en un programa normal de C?
    La programación orientada a eventos y la orientada a objetos son ortogonales. Para Windows se puede programar con programas “normales de C” de la misma manera que se hace para X, Palm, o cualquier otro sistema parecido. El “corazón” de esos programas suele ser algo así:
    Código:
    TipoEvento e;
    while (1) {
      RecibeEvento(&e);  /* duerme hasta que pasa algo */
      switch (e.tipo) {
        case ALGO: hace_algo(e); break;
        case OTRA_COSA: hace_otra_cosa(e); break;
        /* etc... */
      }
    }
    
    Originalmente publicado por SePHi Ver mensaje
    bueno.. te aseguro que llevo un par de horas buscando cosas como signal, kill, "dormir proceso" semaforo, etc.. , nunca supe muy bien que era lo que quería decir winapi.. y ya he estado en la página de MSDN.. puede incluso que haya visto esa entrada, pero me suena todo a C++ hay muchas cosas que no entiendo.. y eso de las "clases", ¿es algo que exista en C normal..?
    ¿Qué “clases”? ¿Estamos viendo la misma página?

    Originalmente publicado por SePHi Ver mensaje
    bueno, uso una librería que se llama allegro.. no sé si te suena, la elegí porque es muy portable, y me proporciona funciones gráficas bastante buenas. También puedo definir funciones para el tratamiento de dichos eventos.. lo único que quiero es dormir el proceso pricipal con el equivalente a wait() y en dichas funciones hacer un signal() para despertarlo! o hacer un down() y luego un up() desde la funcion de tratamiento de interrupción... nada del otro mundo.. pero sigo sin encontrar la forma de hacerlo en windows..
    Esto quizás te ayude: http://winprog.org/tutorial/es/
    Me gusta este mensaje
  • #5 Re: semaforos, señales, etc..

    bueno, gracias, pero ya lo he solucionado,
    quizás donde dije "clases" tenía que decir "objetos".. que si se leé en esa página, me dí cuenta después, igual que donde dije signal() tenía que decir kill().. jeje

    bueno, gracias de todas formas..
    Me gusta este mensaje
  • #6 Re: semaforos, señales, etc..

    Originalmente publicado por SePHi Ver mensaje
    bueno, gracias, pero ya lo he solucionado,
    quizás donde dije "clases" tenía que decir "objetos".. que si se leé en esa página, me dí cuenta después, igual que donde dije signal() tenía que decir kill().. jeje

    bueno, gracias de todas formas..
    Aún así, SePHi, lo que dijo pangus es completamente válido. En el sentido de que tu mensaje muestra un error de concepto que no ser borra cambiando un par de palabras. Y el espíritu de la contestación de pangus (y de la mía) es que vayas a interiorizarte sobre cómo funciona realmente WinAPI o la API Win32.

    Yo te diría que no sigas adelante si no comprendiste bien el concepto.
    Me gusta este mensaje
  • #7 Re: semaforos, señales, etc..

    Estimado: Pasemos en limpio que es y para q se utilizan los semaforos. Un semaforo es una estructura de datos del sistema operativo creada con el fin de solucionar el acceso a regiones criticas. Una region critica es un lugar en la memoria ya sea un archivo o datos en el cual mas de un proceso puede leer y sobre todo escribir "Al mismo tiempo". No se si ves el grado de complejidad al q me refiero teniendo en cuenta q los sistemas multitarea(con mas de un proceso ejecutandose al "mismo tiempo") ponen a dormir los procesos (sin importar lo q esten haciendo) para dar lugar a otros procesos q quieren ejecutarse. Suponte q un proceso A esta poniendo en una cola de impresion un archivo para imprimir, el proceso A lee cual es el lugar disponible en la Cola ej la posicion 5 en el momento q el proceso lee y registra q el lugar a posicionar su archivo a imprimir es el 5, el sistema operativo decide darle lugar al proceso B el cual quiere imprimir un archivo. B lee cual es el lugar disponible (el 5) coloca su archivo a imprimir y actualiza la posicion libre de la cola al siguiente lugar (el 6) y termina ya q realizo su tarea. Cuando el Proceso A vuelve a tomar el control(retorna desde donde fue interrumpido) el coloca su archivo en la posicion 5 (ya q este era el valor q leyo antes de retirarse) actualiza la cola a 6 y se retira. Como vemos el archivo del proceso B nunca sera impreso. Para este tipo de problemas se implementan los semaforos, no solo para poner a dormir un proceso. No es la solucion a tu problema los semaforos. Espero ser Claro
    Me gusta este mensaje
  • #8 Re: semaforos, señales, etc..

    Es interesante... pero al final, nadie dijo cuales eran las funciones que se usan bajo Win... Yo he programado montones de veces en C en Windows... Hablando de semáforos, mutexes, variables de condición... Bueno, Windows es realmente una porquería en ese tema. Bajo Windows, no existen las variables de condicion, no al menos con la semántica de las variables de condición Posix... por eso, encontrar equivalente exactos en el WinAPI no es posible. Bueno, ahora a lo que sí existe: Para sincronizar threads, existen LA famiala de Funciones *Event() : CreateEvent(), SetEvent(), etc... Para esperar que un evento se"señale"... WaitEvent(), Además, EstAn las CRITICAL_SECTION (parecidas a los Mutexes, y Los Semáforos (CReateSemaphore() y funciones amigas... Enfin... También existe una librería desarrollada por terceros llamada libpthread para Windows, que , usando las primitivas disponibles en Win, implementa todas las primitivas de sincronizacion multithread de Linux/Unix... Y talvez sea la mejor idea si lo que estan buscando es portabilidad... Por ejemplo, allegro es multiplataforma, por lo que no es nada mala idea usar esa librería pthread (aunque Allegro en sí no sea multithread friendly!)
    Me gusta este mensaje
  • #9 Re: semaforos, señales, etc..

    Podrian porfavor colgar algun ejemplo de uso de semaforos poq aun no encuentro la manera de decrementar el valor de un semaforo :S o sino un ejmplo de evento
    Gracias
    PD Tb estoy en windows
    Me gusta este mensaje
  • #10 Re: semaforos, señales, etc..

    Originalmente publicado por julydiana_15 Ver mensaje
    Podrian porfavor colgar algun ejemplo de uso de semaforos poq aun no encuentro la manera de decrementar el valor de un semaforo :S o sino un ejmplo de evento
    Gracias
    PD Tb estoy en windows
    Para decrementar un semaforo en windows usas la API ReleaseSemaphore, tambien tenes OpenSemaphore y CreateSemaphore para operarlos. Si tenes mas dudas pregunta, yo labure mucho con mutex, semaforos y pipes en windows pero no pidas unas clases porque es poco practico aca en el foro.
    Me gusta este mensaje
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 9 RESPUESTAS
  • 5657 VISTAS
  • 7 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB