2011年6月5日日曜日

VC++2010でGUI版TestRunnerを作る その7

ようやく、テスト中のプログレスバー表示が可能になった。






今回は、VisualStudioのGUIプログラミングに悩まされた。大きな課題は下記の通り。

(1)テストとプログレスバーを同時実行できない
解決策 : スレッドの導入
(2)ワーカースレッドからGUI操作が実行できない
解決策 : Invoke() の導入
(3)複数スレッドからGUI操作を同時に行えない
解決策 : プログレスバーの更新を、ループからタイマに変更


■テストとブログレスバーを同時実行できない

当然だが、シングルスレッドではテストとプログレスバー表示更新を同時実行することはできない。そこで、テスト用スレッドとプログレスバー用スレッドの2つを用意し、並列動作させてみた所、実行時エラーとなった。


■ワーカースレッドからGUI操作ができない

ネットを調べると、複数のスレッドからGUIを操作できないことが判明した。
この問題を回避するためには、「Invoke( )を使用すれば良い」との記述を見つけ、試してみた。

すると、確かにテストとプログレスバーの並列動作ができるようになった。
だが、プログレスバー動作中、キー入力が一切受け付けられない。テスト中、「STOP」キー押下でテストを中断しようと考えていたが、それが実現できなくなる。


■複数スレッドからGUI操作を同時に行えない

最初に考えていた「プログレスバー更新」処理は、永久ループで実現していた。

while( 1 )
{
    プログレスバー更新
    Sleep( 500 )
}
上記処理の場合、他のGUI割り込みが一切受け付けられなくなる。
よって、タイマで一定時間周期でプログレスバーを更新することにした。

void OnTimeOut( )
{
    プログレスバー更新
}


以上、3つの課題をクリアすることで、無事テストとプログレスバー更新を同時実行可能となった。



初期表示状態













テスト実行中












テスト完了(成功)












テスト完了(失敗)














だいぶ完成に近づいた感がある。残りはあと2つかな。

1.実行対象テストの選択
2.エラー結果ダンプ

0 件のコメント:

コメントを投稿