Tag Archives: thread

Multithreading et Lecture du Clavier

La programmation multithreading est un monde à part et il faut bien en être conscient. Dans une des demos sur laquelle je bosse en ce moment, il y a deux threads: le thread principal qui s’occupe de la gestion des messages de la fenêtre via la classique pompe à message GetMessage() et le thread de rendu pour le rendu 3D de la scène. Dans le thread de rendu, l’application a besoin de récupérer l’état des touches du clavier (pour controler la caméra) avec GetKeyboardState(). Mais la chose à savoir est que l’état du clavier et ses messages sont postés dans le thread principal qui gère la fenêtre et du coup le thread de rendu ne reçoit aucun message et donc ne peut pas lire le clavier avec et KeyboardState(). Une solution pour résoudre ce problème est de partager l’état du clavier entre les deux threads à l’aide de la fonction win32 AttachThreadInput():

// === Main.cpp ===
// Main Thread
DWORD main_thread_id = GetCurrentThreadId();


// === Render.cpp ===
// Render Thread
DWORD render_thread_id = GetCurrentThreadId();

AttachThreadInput( render_thread_id, main_thread_id, TRUE );

Maintenant le thread de rendu peut lire l’état du clavier.

Quick Review – Daphne 1.32

Daphne est un petit utilitaire de gestion de processus dans la même lignée que ProcessExplorer. Il affiche la liste détaillée de tous les processus avec toutes les infos (pid, path, threads, priority, …). L’option qui me plait dans ce tool est la possibilité de killer un processus de manière barbare, c’est à dire instantanément et non avec un temps d’attente de plusieurs secondes comme avec le task manager de Windows. Il est aussi possible de lister tous les threads appartenant à un processus et de les terminer individuellement. Très utile pour la mise au point d’applications multithreadées.

Une autre option disponible mais que je n’ai pas testée est de donner à Daphne le privilège “Debug programs”. Cela permettra à Daphne d’afficher encore plus d’informations sur les processus/threads du système. J’ai reproduit ci-dessous le contenu de la page Adding user rights on Windows XP:

In order to see full process list on Windows XP or over, you may
have to add "Debug programs" privilege to your user account.
   1. Run the "Local security setting" administrator by 
      typing "secpol.msc" in the Run... option of yout start menu.
   2. Expand the tree by clicking the "Local policies" item.
   3. Select the "User Rights Assignment" item.
   4. Double-click the "Debug programs" option in the right panel.
   5. Click "Add user or group..." button.
   6. Insert the user name and click "Check names" button.
   7. Click the OK button and close all opened windows.
   8. You have to restart your session.