2007年5月14日月曜日

Listの入れ替え

スライドショーを実行中に、表示するディレクトリを再指定する処理を作った。
表示の実行中はメインスレッド以外にレンダースレッドとローダースレッドが並走しているので注意が必要。
写真の表示リストはローダースレッドが管理しているので、メインスレッドが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 件のコメント: