JeGX HackLAB


Archive for the ‘thread’ tag

[French]Multithreading et Lecture du Clavier[/French][English]Multithreading and Keyboard Reading[/English]

without comments

[French]
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():
[/French]

[English]
Multithreading programming is a world apart and you have to be aware of that fact. In one of my demos I’m working on, there are two threads:
the main thread that manages window messages via the usual GetMessage() based message pump and the render thread for rendering 3D stuff. In the render thread the app needs to retrieve the keyboard state (to control the camera) via GetKeyboardState(). The thing to know is that keyboard state and messages are posted to the main thread and the render thread can’t read keyboard state since this thread doesn’t receive keyboard messages. A way to solve this problem is to share keyboard state between both threads with the AttachThreadInput() win32 function:
[/English]

// === 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 );

[French]
Maintenant le thread de rendu peut lire l’état du clavier.
[/French]

[English]
Now the render thread can access to the keyboard state.
[/English]

Written by JeGX

February 18th, 2008 at 3:57 pm

Quick Review – Daphne 1.32

without comments

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.

Written by JeGX

February 8th, 2008 at 8:50 am