0

プログラムをどのように構成すればよいかを理解するのに苦労しています。最初に私のプログラムの概要を説明し、次に私が試したことと遭遇した問題について説明します。私はゲームを開発しているのではなく、人間の視覚をテストする一連のコンピューター化されたテストを開発しています。投稿が少し長いことは承知していますが、私が抱えている問題についてできるだけ明確にしたいと思います。前もって感謝します!

設計: プログラムは、さまざまな種類のテストを選択し、テストのさまざまなオプションを構成するための多くのオプションを持つ「メイン メニュー」VB.Net フォームを起動します。ユーザーが特定のテストの RunTest ボタンをクリックすると、そのテストを表す TestObject が作成されます。TestObject コンストラクターは、SlimDX RenderForm クラスから派生した StimulusDisplayObject (SDO) を作成します。SDO クラスの役割は、SlimDX デバイス オブジェクトを管理し、さまざまな刺激を画面に表示することです。これには、StimulusObjects (SO) のリストが含まれています。これは、基本的に .bmp イメージからロードされた単なる DX サーフェスであり、画面上のどこにサーフェスを描画するかを SDO クラスに伝えるための位置情報です。SDO が作成された後、TestObject.BeginTest() メソッドが呼び出されます。これは、多数の試行をオブザーバーに提示する単なるループです。

問題: テスト用に事前設定した刺激はかなり静的であり、通常、画面に表示される画像を変更する必要があるのは、多くても 1 秒または 2 秒ごとに 1 回だけでした。可能な限りFPS。画面上で何かを変更する必要があるときはいつでも、TestObject から呼び出される SDO.RenderScene() を用意しました。これは、ユーザーがALT-TAB、CTRL-ALT-Delete、ウィンドウをカバーする(ウィンドウモードの場合)などのときに発生するDeviceLostExceptionsおよび同様の問題を処理しようとするまで、かなりうまく機能しました..)効果的な方法が見つかりませんでしたシーンを継続的にレンダリングすることなく、これらのタイプのエラーを処理します。

そこで、SlimDX の MessagePump.Run() 機能を使用してシーンを常にレンダリングするように SDO クラスを書き直すことにしました。それがこのエラー メッセージの意味だと思います:「追加情報: 単一のスレッドで 2 番目のメッセージ ループを開始することは、有効な操作ではありません。」)。新しいスレッドで SDO オブジェクトを作成することにしましたが、TestObject と SDO オブジェクトの間で通信して SO オブジェクトを追加/削除/変更することができません。マルチスレッド アプリケーションを作成することが最善のアプローチであると 100% 確信しているわけではありません。なぜなら、DX とスレッディングがプログラミングの悪夢につながることを読んだことがありますが、他の解決策が見当たらないからです。ある種のスレッド同期の使用方法を学ぶ必要があると思いますが、私はスレッド化に非常に慣れていないため、同期の学習に長い時間を費やす前に、失敗する運命にある道を進んでいないことを確認したいと考えていますスレッド。マルチスレッド アプリケーションを作成することが最善の選択である場合、DX/SlimDX のスレッドに関する注意すべき問題はありますか? スレッド間でデータを同期する単純な SlimDX スレッド プログラムの例はありますか? この投稿をお読みいただきありがとうございます。アドバイスをいただければ幸いです。マルチスレッド アプリケーションを作成することが最善の選択である場合、DX/SlimDX のスレッドに関する注意すべき問題はありますか? スレッド間でデータを同期する単純な SlimDX スレッド プログラムの例はありますか? この投稿をお読みいただきありがとうございます。アドバイスをいただければ幸いです。マルチスレッド アプリケーションを作成することが最善の選択である場合、DX/SlimDX のスレッドに関する注意すべき問題はありますか? スレッド間でデータを同期する単純な SlimDX スレッド プログラムの例はありますか? この投稿をお読みいただきありがとうございます。アドバイスをいただければ幸いです。

4

1 に答える 1

1

vanattab さん、.net プラットフォームでのマルチスレッドについて知る必要があるすべて (まあ、ほとんど) を見つけることができるこのオンライン (無料) ブックをチェックしてみてはいかがでしょうか。これは C# 指向ですが、VB にも同じ手法が適用されます。

http://www.albahari.com/threading/

于 2012-09-26T14:14:00.240 に答える