2010-09-13 13 views
0

Je travaille sur un projet MFC où j'ai besoin d'une boucle séparée qui s'exécute en continu ou une fois toutes les quelques secondes, et chaque fois il peut ou non avoir besoin de lancer un Dialogue pour obtenir des informations de l'utilisateur. Je pensais utiliser AfxBeginThread, mais d'après ce que j'ai lu à ce sujet, ça ne marche pas vraiment avec une boucle continue.Thread infini qui peut exécuter ou non un CDialog à chaque boucle

Répondre

1

Ne le faites pas. Vous ne pouvez pas ripper les boîtes de dialogue dans les threads de travail. Ils ne peuvent être démarrés que dans le thread principal, car ils ont besoin du message pump pour fonctionner.

Si tout ce que vous voulez est un signal quelconque qui se déclenche toutes les quelques secondes, alors vous voulez un timer. Définissez le minuteur pour la période de minuterie souhaitée et, lorsque votre thread principal a traité le message WM_TIMER souhaité, vous pouvez ouvrir une boîte de dialogue et faire votre chose. Si vous voulez que votre thread de travail fasse du travail, ce qui peut inclure ou non de demander des informations à l'utilisateur, alors vous voudrez que votre thread utilise PostMessage() pour envoyer un message au thread principal, traiter ce message dans le thread principal en demandant à l'utilisateur des données, puis envoyer un signal au thread de travail avec les données d'entrée. Une façon d'accomplir le dernier bit est d'appeler le QueueUserAPC() à partir du thread principal avec le handle du thread de travail et un pointeur vers une fonction qui fait quelque chose avec les données nouvellement entrées.

+0

Merci la minuterie est exactement ce que je cherchais! – Tbone