- PR -

2つのタイマー処理で、画面が応答なしになる

投稿者投稿内容
NEO
大ベテラン
会議室デビュー日: 2005/10/02
投稿数: 104
投稿日時: 2007-03-07 23:15
パネルの更新は、ログで調査するときにコメントアウトしてました。

私がやっていることは、マルチスレッドプログラミングになっていないんでしょうか?
マルチスレッドだったら、ログでの調査結果のようにはならないはずだと思うんですが…。

同じインスタンスのメソッドを使っていると、別スレッドの実行が待たされたりするようなことがあるんでしょうか?

ログでの調査結果から、個々の処理自体には時間はかかっていない(長くても数百ms)ので、時間がかかって待たされているという感じではないです。

何を疑えば良いでしょうか…
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-03-08 00:57
親フォームの方のコードについて述べます。

worker メソッドの方は「ほぼ」Timer の指定時間通りに呼ばれたとしても(とはいえ、リアルタイムOSではないので完全に正確な時間ではないでしょうが)、UpdateText メソッドの方はウィンドウメッセージの処理待ちです。

どのメソッドがどのスレッドで動いていると考えていますか?

メインスレッド… Button3_Click、UpdateText、他ウィンドウに関わるもの全て
タイマーのスレッド…worker

ですよね?

いろいろ複雑な事はしているでしょうが、Invoke は基本的に PostMessage を呼び出して終わりだと思います。

引用:

親とダイアログから呼ばれるメソッドでは、複雑な計算を行っています。
その数は50くらいです。
計算の対象となるデータの件数は多くても数千件です。
2秒はかからないと思うのですが…。


メインスレッドでそんな事しないで複雑な計算は Timer のスレッドの方でやらせて、メインスレッドは結果を参照するだけにしたらどうですか?

_________________
囚人のジレンマな日々

スキルアップ/キャリアアップ(JOB@IT)