C/Visual C - Threads que conectan con ActiveX

 
Vista:

Threads que conectan con ActiveX

Publicado por Luis (2 intervenciones) el 13/11/2000 00:00:00
Tengo un progrma que conecta con una ActiveX, intercambia datos, etc.
El problema que tengo es que si pasado un tiempo la ActiveX no me contesta debo poder cortar la conexión y retomar el control en la DLL en C.
Lo he probado con Threads pero cuando trato de ejecutar en el Thread el codigo de conexión con la ActiveX (que funciona perfectamente fuera del Trhead)me da error al tratar de crear la instancia del objeto ActiveX. ¿Alguna sugerencia?
Gracias
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
Imágen de perfil de Alejandro

Manejo de tiempo de espera en la conexión con ActiveX en un hilo separado

Publicado por Alejandro (913 intervenciones) el 04/09/2024 00:11:37
Si estás experimentando problemas al intentar ejecutar el código de conexión con la ActiveX en un hilo separado, es posible que estés enfrentando un problema de concurrencia o de acceso a recursos compartidos. Aquí hay una sugerencia para manejar el tiempo de espera y retomar el control en la DLL en C:

1. Crea una función separada que se encargue de la conexión con la ActiveX. Esta función se ejecutará en un hilo separado. Por ejemplo:

1
2
3
4
void ConectarConActiveX() {
    // Código de conexión con la ActiveX
    // ...
}

2. En tu función principal en la DLL en C, crea un hilo utilizando la función `CreateThread()` para ejecutar la función `ConectarConActiveX()`. Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <windows.h>
 
// Función principal en la DLL en C
void MiFuncionPrincipal() {
    // ...
 
    // Crear un hilo para ejecutar la función ConectarConActiveX
    HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ConectarConActiveX, NULL, 0, NULL);
    if (hThread == NULL) {
        // Manejar el error de creación del hilo
        // ...
    }
 
    // ...
 
    // Esperar un tiempo determinado para recibir una respuesta de la ActiveX
    DWORD dwResult = WaitForSingleObject(hThread, tiempoEspera);
    if (dwResult == WAIT_TIMEOUT) {
        // Si el tiempo de espera ha expirado, cancelar la conexión y retomar el control en la DLL en C
        // ...
    }
 
    // ...
 
    // Cerrar el hilo
    CloseHandle(hThread);
 
    // ...
}

3. En el caso de que el tiempo de espera expire y desees cancelar la conexión con la ActiveX, puedes utilizar alguna función o método proporcionado por la ActiveX para interrumpir la conexión. Consulta la documentación de la ActiveX para obtener más información sobre cómo realizar esta acción.

Espero que esta sugerencia te sea útil para manejar el tiempo de espera y retomar el control en la DLL en C en caso de que la ActiveX no responda. ¡Buena suerte con tu desarrollo, Luis!
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