###前提・実現したいこと
Visual Studio2010を使用して画像を取得するアプリケーションを作成しています。
1秒間に0.1GB程度(実質60MB/s)のデータをフレームレートが30程度のスピードにて取得してファイル出力(HDDへ)するのが目的のため、ファイル出力分の遅延処理が発生します。遅延時にも画像データを取りこぼさないよう、スレットを複数に分けて、処理を行おうと考えています。
###発生している問題
700枚程度までは、画像取得・保存・遅延時には、保存スレッド・遅延スレッドでの保存が出来ているが、それ以降300フレーム程の保存漏れが発生(全部で1800枚程度取得)。
700枚程度までは普通に動いているのに、一部、全く動かない事があり、困っています。
3つのスレッドを、どう管理したら良いのでしょうか。アドバイス頂ければ幸いです。
処理の内容として
☆画像取得スレッド(メインスレッド)
①画像情報を取得
②既存の画像取得用リストの上限を確認
③確認して上限を超えそうなら、上限を超えそうな数分、遅延用リストへ移す
④上限に達していなければ取得用リストへ入れる
①へ
☆保存処理スレッド
①画像取得スレッドの取得リストを確認、データが取得されていれば、リストからデータを取得
②画像保存
③保存したリストを削除
①へ
☆遅延処理スレッド
①空ループにて遅延用リストを監視
②遅延用リストにデータが入ってきたら、保存処理
③保存したらリストからデータを削除
①へ
###試したこと
画像取得スレッド・保存処理スレッドだけでは、遅延分の画像を保存できなかった為、遅延スレッドを作成。
遅延用のリスト構造を作成して監視し、非同期にて遅延分の画像を保存するようにした。
デバック用のLogを出力するようにしたところ、画像取得スレッドの、①~③のみが動いている時があり、肝心の保存処理・遅延スレッドでの保存が出来ていない事があった。(700枚程度の取得までは可能だが、そこらへんから一気に取得漏れが発生)。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/06 08:26
2016/07/06 09:11
2016/07/06 12:57
2016/07/06 13:28
2016/07/07 02:14
2016/07/07 02:48
2016/07/07 12:47