[VC++] Equivalent du DoEvents de VB (pour pas "tout bloquer").

Equivalent du DoEvents de VB (pour pas "tout bloquer"). [VC++] - C++ - Programmation

Marsh Posté le 28-08-2001 à 23:27:27    

comment on fait ? car mon appli fait une "grosse opération" (copie massive de données sur le disque) j'ai un btn "cancel" mais on peut pas clicker dessus (car le PC "mouline" ). Ave VB, un doevents marcherait mais... comment fait on en VC++ ? j'ai beau passer le thread et le process en IDLE, rien n'y fait ....

Reply

Marsh Posté le 28-08-2001 à 23:27:27   

Reply

Marsh Posté le 28-08-2001 à 23:35:59    

tu rajoute un 2eme thread : l'operation gourmande en tps cpu, tu la mets dans un 2eme thread => le thread principal peut ecouter la file de msg de zindows.
 
pour les threads, si tu utilise la MFC, c'est AfxBeginThread, sinon _beginthread

Reply

Marsh Posté le 28-08-2001 à 23:37:49    

ça va, j'ai une autre méthode (j'utilise déjà un 2nds thread...)
 
(le code est pas mis en forme.....)
 
BOOL CApp::DoEvents(){        MSG msg;        while ( ::PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )        {                if ( !PumpMessage( ) )                {                        ::PostQuitMessage( 1 );                        return FALSE;                }        }        // let MFC do its idle processing        LONG lIdle = 0;        while ( OnIdle(lIdle++ ) )                ;        return TRUE;}

Reply

Marsh Posté le 28-08-2001 à 23:38:07    

BOOL CApp::DoEvents(){        MSG msg;        while ( ::PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )        {                if ( !PumpMessage( ) )                {                        ::PostQuitMessage( 1 );                        return FALSE;                }        }        // let MFC do its idle processing        LONG lIdle = 0;        while ( OnIdle(lIdle++ ) )                ;        return TRUE;}

Reply

Marsh Posté le 28-08-2001 à 23:40:10    

c'est illisible ton truc  :lol:

Reply

Marsh Posté le 28-08-2001 à 23:46:01    

et avec un 2eme thread, t'as toujours un probleme d'interactivité avec ta gui ? C'est pas normal du tout.

Reply

Marsh Posté le 29-08-2001 à 09:04:38    

Sous WIN3 et WIN32, j'utilise Yield() "quand il faut". Ca permet de redonner la main au système pour lire les messages en attente, voir si on a frappé sur ESCAPE, etc..
 
Bien que "multitâche" (??) Win32 perd la main si on écrit un programme qui boucle de façon infinie.  :(

Reply

Sujets relatifs:

Leave a Replay

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