Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Nouveau thread?

3 réponses
Avatar
Nicolas IG
Bonjour,

Je développe actuellement un contrôle activeX (MFC, visual C++) et je suis
confronté au problème suivant:
Grace à un Timer, je fais clignoter un symbole. Au clic d'un bouton, je
lance un Sleep de 5 secondes suivi d'un MessageBox.
Or, lors du Sleep, le clignotement s'arrette et ne reprend qu'après le
MessageBox clos.

Je suis novice dans ce type de programation, mais il me semble que le Sleep
fasse dormir le processus de clignotement.
Comment puis-je faire pour lancer un Sleep sans pour autant bloquer tout le
reste de l'application? Faut-il que je le lance dans un nouveau thread? Et
si oui
comment faire une telle chose?

Cordialement,
Nicolas

3 réponses

Avatar
Loïc Joly
Nicolas IG wrote:
Bonjour,

Je développe actuellement un contrôle activeX (MFC, visual C++) et je suis
confronté au problème suivant:
Grace à un Timer, je fais clignoter un symbole. Au clic d'un bouton, je
lance un Sleep de 5 secondes suivi d'un MessageBox.
Or, lors du Sleep, le clignotement s'arrette et ne reprend qu'après le
MessageBox clos.

Je suis novice dans ce type de programation, mais il me semble que le Sleep
fasse dormir le processus de clignotement.
Comment puis-je faire pour lancer un Sleep sans pour autant bloquer tout le
reste de l'application? Faut-il que je le lance dans un nouveau thread?


C'est effectivement la solution classique au problème.

Et
si oui
comment faire une telle chose?


Ca dépend du système d'exploitation. Comme tu es sous windows, tu peux
regarder du côté de _beginthread, mais c'est hors sujet sur ce groupe.

--
Loïc

Avatar
Christophe de VIENNE
Salut,

Nicolas IG wrote:
Bonjour,

Je développe actuellement un contrôle activeX (MFC, visual C++) et je suis
confronté au problème suivant:
Grace à un Timer, je fais clignoter un symbole. Au clic d'un bouton, je
lance un Sleep de 5 secondes suivi d'un MessageBox.
Or, lors du Sleep, le clignotement s'arrette et ne reprend qu'après le
MessageBox clos.
<snip>


Pourquoi ne pas lancer un timer non répétitif de 5 secondes au lieu de
faire un Sleep ? Comme ça tu auras le même effet (annulable facilement
en plus), et sans avoir à t'embêter avec un thread.

A+

Christophe

Avatar
Nicolas IG
Ca dépend du système d'exploitation. Comme tu es sous windows, tu peux
regarder du côté de _beginthread, mais c'est hors sujet sur ce groupe.


Merci beaucoup, cela marche parfaitement!



#include <process.h>

int main()
{
...
HANDLE hThread;
unsigned threadID;
hThread = (HANDLE)_beginthreadex( NULL, 0, &test, NULL, 0, &threadID );
CloseHandle( hThread );
...
}

unsigned __stdcall test ( void* pArguments )
{
Sleep (2000);
_endthreadex( 0 );
return 0;
}