Question à priori basique en VC++

Question à priori basique en VC++ - Programmation

Marsh Posté le 09-04-2001 à 12:12:22    

Bonjour,
 
Vous devez être d'accord avec moi, ce qui peut être fait en VB peut aussi l'être en VC++.
 
Alors maintenant donnez moi le code VC++ du DoEvents de VB...

Reply

Marsh Posté le 09-04-2001 à 12:12:22   

Reply

Marsh Posté le 09-04-2001 à 12:35:22    

je connais bien VC++ mais pas du tout VB, alors c'est quoi "DoEvents" ?

Reply

Marsh Posté le 09-04-2001 à 12:42:09    

Le doevents permet ( enfin c'est mon idée et la msdn) de rendre la main au systeme pendant l'execution d'un traitement long.
 
On l'utilise par exemple a la fin des instruction d'une boucle très longue ou lors de l'appel d'un prog externe dont le tps d'execution peut etre variable


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 09-04-2001 à 13:22:29    

Accessoirement on s'en sert aussi en client serveur par winsock pour faire des boucles d'attente (while...) avec uniquement un doevetns dedans ce qui permet d'attendre le réponse de l'autre poste

Reply

Marsh Posté le 09-04-2001 à 13:40:25    

Alors là, c'est beaucoup plus subtile qu'en VB ...
En effet, si tu veux effectuer deux taches en meme temps, le mieux c'est quand meme de creer un thread et d'éxecuter ton traitement long dedans, ce sera plus efficace.
Sinon, il faut vérifier à intervalle régulier si il y a de nouveaux messages dans la pile des messages Windows de l'appli
et les transmettre à la procedure WindowsProc de ton appli (c'est ce que fait la methode idle() de CWinApp dans les MFC).
 
En espérant t'avoir aider.
a+

Reply

Marsh Posté le 09-04-2001 à 13:42:10    

Pour ce que j'ai dit au niveau des MFC, il semblerait que ce soit faux.  
Dsl !

Reply

Marsh Posté le 09-04-2001 à 13:46:41    

Un exemple de la méthode "sans 2eme thread" dans le topic :
Faire une pause dans l'éxécution d'une boucle en C++ ?

Reply

Marsh Posté le 09-04-2001 à 17:04:50    

A mon avis, voici ce que fait ton DoEvents
 
MSG msg ;  
// Read all of the messages in this next loop,  
// removing each message as we read it.
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))  
{  
     // Dispatch the message.
     DispatchMessage(&msg);  
}


---------------
SetiCommander, le setiseur à la chaîne ...
Reply

Marsh Posté le 09-04-2001 à 17:49:08    

si tu veut pas te faire chier !
dans ta boucle tu met l'instruction "Sleep(nbmilliseconde);"

Reply

Marsh Posté le 09-04-2001 à 17:51:18    

non car sleep crée un pause ou rien ne sefait et d'une durée limitée fixe alors que Doevents attends que Win ai "fini" pour reprendre.
 
mais je vais essayer de me débrouiller avec ça !
merci à vous tous.

Reply

Marsh Posté le 09-04-2001 à 17:51:18   

Reply

Marsh Posté le 09-04-2001 à 18:45:04    

c'est vrai, sleep ne fait que mettre en pause le thread en cours; alors que ce que je t'ai proposé devrait faire a peu près ce que fait DoEvents


---------------
SetiCommander, le setiseur à la chaîne ...
Reply

Marsh Posté le 09-04-2001 à 21:15:35    

effectivement

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed