マルチスレッドでの砂時計カーソル表示 – プログラミング – Home

マルチスレッドでの砂時計カーソル表示
 
通知
すべてクリア

[解決済] マルチスレッドでの砂時計カーソル表示


sunyopu
 sunyopu
(@sunyopu)
ゲスト
結合: 23年前
投稿: 68
Topic starter  

処理中の砂時計カーソル表示について、質問があります。

開発環境は、Windows2000、VC++6.0です。

プログラムは、マルチスレッドで動作しているのですが、
一方のスレッド(サブスレッド)が仕事中に、
メインスレッドを入力禁止(砂時計表示)にしたいのですが、
それがうまくいきません。

メインスレッドで、
サブスレッドが動作前に、以下をコールし、
AfxGetApp()->BeginWaitCursor();

サブスレッドから終了通知がきたら、
AfxGetApp()->EndWaitCursor();

をコールしています。

単一スレッドのプログラムでは、うまく動作します。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

Windowsはマウスカーソルが移動するたびにWM_SETCURSORを使って
カーソルを更新しています。
メインスレッドが普通にメッセージ処理をしているならば、
常にCWnd::OnSetCursor()が呼び出され、カーソルは元に戻ってしまいます。

次のどちらかの方法で対処できます。

1) OnSetCursor()ハンドラを追加して、
 スレッドが動いているときは、独自のカーソルをセットする。
 (CWnd::OnSetCursor()を呼び出さないようにするだけでいいかも)

2) サブスレッド内でRestoreWaitCursor()をしつこく呼び出す。


返信引用
sunyopu
 sunyopu
(@sunyopu)
ゲスト
結合: 23年前
投稿: 68
Topic starter  

dairygoods いつもありがとうございます。

内部的に、砂時計表示中は、OnSetCursor()内で、RestoreWaitCursor()を
コールすることで、解決できました。

CWnd::OnSetCursor()をコールしないという方法は、うまくいきません
でした。


返信引用
sunyopu
 sunyopu
(@sunyopu)
ゲスト
結合: 23年前
投稿: 68
Topic starter  

申し訳ありません。 さんが抜けてしまいました。
dairygoodsさん いつもありがとうございます。


返信引用
sunyopu
 sunyopu
(@sunyopu)
ゲスト
結合: 23年前
投稿: 68
Topic starter  

解決しました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました