Cómo ejecutar una única instancia de una aplicación
, implementación de VC
La programación Visual C WIN32 enfatiza principalmente el nombre de referencia de la herramienta de programación y dice VC. Si no quiere que VC sea inútil, hablemos de ello y veamos qué. funciones que puede realizar con VC
A. Utilice el compilador para implementar (usando el marco MFC):
Agregue algunas líneas al archivo .cpp: #pragma data_seg("Shared") int volatile g_lAppInstance =0 #pragma data_seg() p>
Leí el contenido:
La primera oración #pragma data_seg("Shared") crea una nueva sección llamada Compartida
La segunda oración int volatile g_lAppInstance =0 g_lAppInstance lo coloca en la sección Compartida y presta atención a la inicialización de g_lAppInstance. El compilador lo colocará en la sección Compartida; de lo contrario, lo colocará en la sección externa Compartida (el compilador de Visual C real proporciona el especificador de asignación para permitir que se coloquen los datos). en cualquier sección)
La tercera oración indica al compilador que finalice el comentario #pragma de la sección Compartida (enlazador, "/sección: Compartido, RWS")
Le hago saber al vinculador del compilador que mi sección Compartida tiene un atributo compartido de lectura y escritura e implemento una clave de ejecución mutuamente excluyente entre instancias de mi aplicación **Disfruta de la variable g_lAppInstance
Se agrega la función InitInstance(): if(g_lAppInstancegt; 1. ) { AfxMessageBox("¡El programa se ha ejecutado!"); return FALSE;
El código comienza a funcionar en el programa g_lAppInstancd agrega 1 y encuentra que su valor es 1 para mostrar el cuadro de mensaje y devuelve. FALSO (nota: MFCInitInstance devuelve FALSO cuando el programa se está ejecutando)
B. Utilice un mutex con nombre:
Utilice la función API CreateMutex. Crear un objeto mutex con nombre para implementar la exclusión mutua del programa es más común Agregué el código a la función IninInstance(): HANDLE hObject = CreateMutex(NULL, FALSE, "LJPXYXC"); if(GetLastError() == ERROR_ALREADY_EXISTS) { CloseHandle(hObject); corriendo!"); return FALSE; }
La función CreateMutext crea un mutex con nombre llamado LJPXYXC. El segundo ejemplo del programa llama a CreateMutex y devuelve ERROR_ALREADY_EXISTS. Implemento la operación de exclusión mutua del programa en función del valor
2. Implementación de VB
VB implementa la imagen global del programa App.PreInstance para implementar el valor booleano de la función App.PreInstance. Su valor True indica que el programa se ha ejecutado como una instancia. Falso, el programa se está ejecutando
Función de implementación de programación de eventos de carga del cuerpo de mi ventana, código: sub privado Form1_load() Si App.PreInstance = True, entonces el programa MsgBox se ha ejecutado Descargarme Finalizar si finaliza sub
3. Delphi, implementación de C Builder
No encontré que el compilador de Delphi C Builder implemente funciones como VC, así que llamo a CreateMutex para implementar la función
CreateMutext(
) y los detalles de las funciones GetLastError(), consulte MSDN.