表示の実行中はメインスレッド以外にレンダースレッドとローダースレッドが並走しているので注意が必要。
写真の表示リストはローダースレッドが管理しているので、メインスレッドがGUIの指示でリストを入れ替えると不整合が起きる。そこで、メインスレッドがリストを入れ替える前にスレッドを終了させて、リストを入れ替えた後にスレッドを再起動する様にした。
EndThread();
CFileList *pNewList = new CFileList();
pNewList->GetList(filePath);
if(!pNewList->IsEmpty())
{
delete pFileList;
pFileList = pNewList;
}
else
{
delete pNewList;
}
StartThread();
EndThread();でローダーとレンダースレッドが終了するのを待って、リスト処理後にStartThread();で再起動するハズだった
けどなぜか入れ替え後に例外が多発する様になった。threadの同期処理用のevent待ちの対応がおかしくなっているみたいだった。
EndThreadでeventハンドルも開放してStartThreadでハンドルを作り直しているつもりだけど、そうなっていないような動作をしている
調子に乗ってThread化しすぎて処理がややこしくなったみたい
0 件のコメント:
コメントを投稿