OVH Cloud OVH Cloud

Pb avec la fonction WaitForSingleObject et RasDial

2 réponses
Avatar
Marc
Bonjour,
je cherche à établir une connexion à distance en utilisant RasDial et
WaitForSingleObject.
Mais WaitForSingleObject bloque le déroulement du programme...
Mon code en C++ est le suivant :

HANDLE Event_handle; // Global event handle.
HRASCONN hRasConn; // Handle to RAS connection.
RASCONNSTATUS mystate; // Buffer to receive status data.
LPCTSTR MyRasDialEvent="RASEvent"; // Pointer to the event name.
RASDIALPARAMS Myrasdialparams;

// ici j'initialise correctement Myrasdialparams

Event_handle = CreateEvent(NULL, FALSE, FALSE, MyRasDialEvent);
// tout se passe bien
hRasConn=NULL;
DWORD retval = RasDialA(NULL, NULL, &Myrasdialparams, 0, &RasDialFunc,
&hRasConn);
// tout se passe bien
retval = WaitForSingleObject(Event_handle, 30000);

Et ici l'appel à cette fonction bloque le programme pendant 30 secondes,
c'est à dire que la tentative de connexion ne débute qu'après 30 secondes.
Pourquoi cette fonction est bloquante dans mon exemple ?
Merci de votre aide.
(sinon, je peux toujours m'en sortir avec un timer pour savoir où en est la
connexion mais c'est pas très élégant).
Marc

2 réponses

Avatar
voir
Bonjour

On Fri, 24 Oct 2003 18:13:52 +0200, "Marc" wrote:

Event_handle = CreateEvent(NULL, FALSE, FALSE, MyRasDialEvent);
// tout se passe bien
hRasConn=NULL;
DWORD retval = RasDialA(NULL, NULL, &Myrasdialparams, 0, &RasDialFunc,
&hRasConn);
// tout se passe bien
retval = WaitForSingleObject(Event_handle, 30000);

Et ici l'appel à cette fonction bloque le programme pendant 30 secondes,
c'est à dire que la tentative de connexion ne débute qu'après 30 secondes.
Pourquoi cette fonction est bloquante dans mon exemple ?



Ya personne qui fera passer ton evenement MyRasDialEvent à l'état
signalé. Donc, WaitForSingleObject bloque pdt la valeur que tu as
indiqué, soit 30 secondes, et renvoie WAIT_TIMEOUT (tu devrais tester
un peu + les compte-rendus de fcts).

(sinon, je peux toujours m'en sortir avec un timer pour savoir où en est la
connexion mais c'est pas très élégant).



En effet.

Pour savoir si RasDial a fini par établir une connexion, il faut lire
les messages de la callback (si tu veux être en asynchrone). Sinon, si
tu veux bloquer l'appli pdt le temps d'établissement de la connexion,
il faut passer NULL pour la callback.

Voir la doc
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rras/rras/rasdial.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rras/rras/rasdialfunc.asp


=-=-=-=-=-=-=-=-=-=-
Fred
#include "SignatureSympa.h"
/* Mon email c'est sur freesurf.fr et c'est "fr-p" */
Avatar
Marc
Merci pour ta réponse...