Pb avec la fonction WaitForSingleObject et RasDial
2 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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" */
Bonjour
On Fri, 24 Oct 2003 18:13:52 +0200, "Marc" <metrica@free.fr> 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" */
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" */