{"id":82,"date":"2008-02-18T15:57:09","date_gmt":"2008-02-18T14:57:09","guid":{"rendered":"http:\/\/www.ozone3d.net\/blogs\/lab\/?p=82"},"modified":"2017-10-20T09:38:11","modified_gmt":"2017-10-20T08:38:11","slug":"multithreading-et-lecture-du-clavier","status":"publish","type":"post","link":"https:\/\/www.ozone3d.net\/blogs\/lab\/20080218\/multithreading-et-lecture-du-clavier\/","title":{"rendered":"Multithreading et Lecture du Clavier"},"content":{"rendered":"<p>La programmation multithreading est un monde \u00e0 part et il faut bien en \u00eatre conscient. Dans une des demos sur laquelle je bosse en ce moment, il y a deux threads: le thread principal qui s&#8217;occupe de la gestion des messages de la fen\u00eatre via la classique pompe \u00e0 message GetMessage() et le thread de rendu pour le rendu 3D de la sc\u00e8ne. Dans le thread de rendu, l&#8217;application a besoin de r\u00e9cup\u00e9rer l&#8217;\u00e9tat des touches du clavier (pour controler la cam\u00e9ra) avec GetKeyboardState(). Mais la chose \u00e0 savoir est que l&#8217;\u00e9tat du clavier et ses messages sont post\u00e9s dans le thread principal qui g\u00e8re la fen\u00eatre et du coup le thread de rendu ne re\u00e7oit aucun message et donc ne peut pas lire le clavier avec et KeyboardState(). Une solution pour r\u00e9soudre ce probl\u00e8me est de partager l&#8217;\u00e9tat du clavier entre les deux threads \u00e0 l&#8217;aide de la fonction win32 AttachThreadInput():<\/p>\n<pre>\r\n\/\/ === Main.cpp ===\r\n\/\/ Main Thread\r\nDWORD main_thread_id = GetCurrentThreadId();\r\n\r\n\r\n\/\/ === Render.cpp ===\r\n\/\/ Render Thread\r\nDWORD render_thread_id = GetCurrentThreadId();\r\n\r\nAttachThreadInput( render_thread_id, main_thread_id, TRUE );\r\n<\/pre>\n<p>Maintenant le thread de rendu peut lire l&#8217;\u00e9tat du clavier.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La programmation multithreading est un monde \u00e0 part et il faut bien en \u00eatre conscient. Dans une des demos sur laquelle je bosse en ce moment, il y a deux threads: le thread principal qui s&#8217;occupe de la gestion des messages de la fen\u00eatre via la classique pompe \u00e0 message GetMessage() et le thread de rendu pour le rendu 3D de la sc\u00e8ne. Dans le &hellip; <a href=\"https:\/\/www.ozone3d.net\/blogs\/lab\/20080218\/multithreading-et-lecture-du-clavier\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Multithreading et Lecture du Clavier<\/span> <span class=\"meta-nav\">&raquo;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[246,247,248,245,224],"class_list":["post-82","post","type-post","status-publish","format-standard","hentry","category-programming","tag-attachthreadinput","tag-getcurrentthreadid","tag-getkeyboardstate","tag-multithreading","tag-thread"],"aioseo_notices":[],"views":398,"_links":{"self":[{"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/posts\/82","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/comments?post=82"}],"version-history":[{"count":0,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/posts\/82\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/media?parent=82"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/categories?post=82"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/tags?post=82"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}