トップページ > 記事閲覧
DXライブラリとマルチスレッド
名前:うにてぃちゃん 日時: 2017/04/18 01:20

C++の<thread>でマルチスレッドを作成し、GetMouseInput()をサブルーチンで実行してもマウスの状態を正確に取得できないのですが、なんとかマルチスレッドでGetMouseInput()を使用することはできないでしょうか。 マウスの状態が正確に取得できないとは、GetMouseInput()を実行する際にプログラム実行時のマウス状態を常に返すことです。 〇動作しないプログラムの例 // 状態にかかわらず常にマウスの状態を取得したい void sub (){ while(true){ if (GetMouseInput() && MOUSE_INPUT_LEFT) clickCount++; else clickCount = 0; } } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ // --- 初期化等 --- std::thread thread(sub); thread.detach(); do{ // --- ゲームの処理 --- }while(~~~) return 0; } どうしてもマルチスレッドで実行しなければならないわけではないのですが、状態に関わらずマウスの状態を取得しておきたいので、すべてのループ内にマウス状態を取得する関数を挿入するくらいならサブルーチンで実行しておいたほうが余計な関数が減らせるなあと思った次第です。 ご教授よろしくお願いします。
メンテ

Page: 1 |

Re: DXライブラリとマルチスレッド ( No.1 )
名前:管理人 日時:2017/04/19 03:02

DXライブラリは基本的にマルチスレッド非対応なので、DxLib_Init を呼んだスレッド以外のスレッドからの DXライブラリの関数の呼び出しについては正常な動作は保証できません ただ、GetMouseInput については最近少し処理を変更したので、こちらの最新版でしたら正常な値を取得できるかもしれません よろしければお試しになってみてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい) あと、マウスの入力は基本的に ProcessMessage が呼ばれた際に更新されていますので、定期的に ProcessMessage を 呼んでいればマルチスレッドでも正常な押下状態を取得できそうな気もします…
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存