マルチスレッドの動作停止について質問なんですが
現在、C++とDirectXを使用してマルチスレッドプログラムを作成しているのですが、
どういう訳かプログラムそのものが動作停止を起こしてしまいます
状況としては
1、マルチスレッドは初期の読み込み時にのみ使用していて、毎回同じものを同じ順番で読み込んでいる。
2、読み込んでいるものは3Dモデル、2D画像の二つ
3、毎回動作を停止する訳ではなく、3~4回に1回の割合で停止する
4、動作を停止している位置を調べてみると毎回違う箇所で動作を停止している
5、スレッドセーフで作っており、デッドロック等は起こっていない
6、エラーは例外は出ない
以上の状況で、プログラムの停止する可能性のある原因について心当たりがある方がいれば教えていただきたいです
No.2ベストアンサー
- 回答日時:
このページにあるように、
http://d.hatena.ne.jp/ho_5750/20120417/1334670243
>IDirect3DDevice9::Present をウィンドウメッセージを処理するスレッドとは別のスレッドから呼び出すと、この Present で固まることがあるというものでした。
のような処理はないですか?
回答ありがとうございます。
確認したところ、確かに別スレッドからデバイス制御を行っている場所があります。
ここの処理をメインスレッドにまとめたところ確かにとまらなくなりました。
いろいろと無知ですみません。
わざわざ調べてまでいただいて本当にありがとうございます
No.1
- 回答日時:
動作停止ということは、アプリからOSに処理が戻らないということですよね。
エラーが出ていないということであれば、スレッド本体、もしくは、そのスレッドを制御している処理自体で、どこかループしてしまっているか、読み込み処理に時間がかかりすぎて動作停止しているのではないでしょうか。
スレッドの実装方法自体が間違っているということは無いですよね?
回答ありがとうございます。
ループして動作が遅いというよりは、完全に「応答無し」状態になってしまっていて、タスクマネージャーからでしか起動したエグゼファイルを終了できない状態」です
いろいろと試してみた結果、毎回フリーズしてしまうのはマルチスレッドの方ではなく本スレッドのロード画面を描画しているスプライトのLPDIRECT3DDEVICE9の>Presentのあたりみたいです
スレッドの実装方法ですがDirectXのLPDIRECT3D9のCreateDeviceで
「D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED」
と記述してマルチスレッドを使用しています
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- エアコン・クーラー・冷暖房機 富士通のエアコンですが、作業員に見て貰っても、以後冷房運転が時々止まり困ってます。 6 2022/07/18 19:22
- ノートパソコン Windows 10 動作改善方法 6 2023/04/26 22:30
- バックアップ EasuUsToDo11のスマートバックアッププランの停止 2 2022/09/23 00:14
- 洗濯・クリーニング・コインランドリー 【止まってばかりの洗濯機…これって洗えてますか?】 ※長文です。すみません とても困っておりますので 4 2022/03/30 11:50
- Windows 10 2023年05月03現在Win7sp1からWin10への無償アップグレードについて 6 2023/05/04 16:36
- ヒーター・こたつ・ホットカーペット オイルレスヒーター使ったら電源落ちる、夢暖房買って大丈夫ですか 1 2022/12/27 22:52
- Excel(エクセル) エクセルVBA 複数行にまたがっている選択を判定するには 2 2023/05/21 21:54
- 車検・修理・メンテナンス 4GR-FSE 電動ファンが止まらない 3 2022/09/10 17:35
- 政治 選挙間近になって貯水池の底が抜けたのは何故ですか? 3 2022/05/19 09:27
- その他(バイク) バイクの停止時、発進時にふらつくことがあります 4 2022/11/09 22:32
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++スレッドの正しい終了のさ...
-
スレッドの監視方法について
-
マルチスレッドについて
-
WaitForSingleObjectの使い方に...
-
volatile の使い方
-
マルチスレッド?
-
pthread_cond_wait 取りこぼし?
-
スレッドの安全な終了のさせ方
-
_beginthreadexについて
-
マルチスレッドのスレッド数を...
-
VC++ メインループでのイベン...
-
VisualC++で関数を裏で実行したい
-
マルチスレッド内のループについて
-
MFC通信プログラムマルチスレッ...
-
シングルスレッドでMFC
-
LinuxでDoEvents()同等機能
-
CPU資源をなるべく消費しないで...
-
並列計算について
-
クラス内でのpthread_createに...
-
スレッドの終了の仕方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++スレッドの正しい終了のさ...
-
WaitForSingleObjectの使い方に...
-
マイクロソフトedge で5チャン...
-
スレッドの安全な終了のさせ方
-
スレッドの終了はどうやるんで...
-
スレッドにて同一メモリの書き...
-
スレッドの監視方法について
-
マルチスレッドについて
-
スレッドの終了の仕方
-
Linuxでスレッド優先度って変え...
-
Windows上で、シグナル(SIGTERM...
-
LinuxでDoEvents()同等機能
-
VB2005 シリアル通信のClose処理
-
待機関数(WaitForMultipleObjec...
-
マルチスレッドプログラミング...
-
_beginthreadexで生成したスレ...
-
msec単位のWait Timerが作れない!
-
別スレッドからメインダイアロ...
-
マルチスレッドのスレッド数を...
-
.NetのBackgroundWorkerクラス...
おすすめ情報