es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede abrir el semáforo existente desde otro proceso en C++.

Estoy tratando de obtener un semáforo existente desde otro proceso. Para crear el semáforo, utilicé:

Semaphore(std::string name, int startState) {
    name = "Global\\" + name;
    Sem = OpenSemaphore(SYNCHRONIZE | SEMAPHORE_MODIFY_STATE, true, (LPCWSTR)name.c_str());
    int s = (startState > 0);
    if (Sem == NULL) {
        Sem = CreateSemaphore(NULL, s, 1, (LPCWSTR)name.c_str());
    }
}

En el primer proceso, el semáforo se crea correctamente. GetLastError() devuelve 0. En el segundo proceso, OpenSemaphore devuelve NULL. Y GetLastError() devuelve 2.
Intenté obtener el semáforo solo con “name”, sin “Global\”, pero obtuve el mismo resultado. ¡Ayuda por favor!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar relacionado con el acceso a un semáforo global desde otro proceso. Al crear el semáforo, agregaste el prefijo “Global\” al nombre, lo cual indica que debería ser un semáforo global accesible por todos los procesos del sistema. Sin embargo, al intentar acceder al semáforo desde otro proceso, necesitas usar el mismo nombre con el prefijo.

    Otra posibilidad es que el segundo proceso no se esté ejecutando con los permisos necesarios para acceder al semáforo. Asegúrate de que el segundo proceso tenga los permisos necesarios para acceder al semáforo y modificar su estado.

    Por último, puedes intentar utilizar la función GetLastError para obtener más información sobre el error. En este caso, el valor de retorno 2 indica que el sistema no puede encontrar el archivo especificado. Esto podría estar relacionado con el nombre del semáforo o un problema de permisos.

    En resumen, para acceder a un semáforo global desde otro proceso, debes usar el mismo nombre con el prefijo “Global\” y asegurarte de que el segundo proceso tenga los permisos necesarios para acceder al semáforo. Además, utiliza la función GetLastError para obtener más información sobre el error.

Comments are closed.