重い処理の時。 VBならDoEvents(って、まだあるんだろうか?俺が触ったのは2.0だ…古っ)、
C言語などWin32API直叩きならPeekMessageなどの合わせ技。 たとえば。
変数の定義とはぶっ飛ばしてかいつまんで言えば
while(PeekMessage(&Msg,dWindow,0,0,PM_REMOVE))
{// メッセージ受信処理
TranslateMessage(&Msg);
DispatchMessage(&Msg);
if(Msg.message==WM_QUIT)
break; //ていうかアプリケーション抜ける処理もせねば
}
こういう類のでイベントキューを強制的に空にする。
あるいはスレッドを使うか。
この処理は、Python + PyGTKなら、こうだ。
while gtk.events_pending():
gtk.main_iteration(1)
これでウィジェットは再描画もされる。
プログレスバーやラベルならquene_draw()とか別にいらない。
ググり方が悪くてruby用gtkのサイトから知ったのは内緒だ
というか、プログレスバーが全然更新されないので、重い処理中の 強制的イベントハンドラ開放を調べまくった俺。
ようやく回答にたどり着けた。
しかし俺の場合、実はプログレスバーが全然進捗していかない本当の原因は、
float()変換している値に対して整数値を ぶつけていたので、
結果としてprogressbar.set_fractionに入れる値が 整数、つまり0と1の二種類だけになっていた罠。
ちなみにスレッドも使ってみたんだが、結局join()でブロックするせいか効果がなかった。なかなか、Win32APIのようには行かないものだ。
やりかたが悪いんだろうか。
今回は、めんどくさくなって一瞬C言語(つかBCB)に手が伸びかけたが、Python & GTKの修練の為と思ってなんとか踏みとどまった。
ま、そういうわけで、俺と同じ目に遭っている人、あるいはこのことを忘れた自分、が必死で検索している時に備えて、GTK、再描画、イベント、Invalidateに相当、DoEvents、キュー、とかキーワードにしそうなのをここに列挙しておくtest。
C言語などWin32API直叩きならPeekMessageなどの合わせ技。 たとえば。
変数の定義とはぶっ飛ばしてかいつまんで言えば
while(PeekMessage(&Msg,dWindow,0,0,PM_REMOVE))
{// メッセージ受信処理
TranslateMessage(&Msg);
DispatchMessage(&Msg);
if(Msg.message==WM_QUIT)
break; //ていうかアプリケーション抜ける処理もせねば
}
こういう類のでイベントキューを強制的に空にする。
あるいはスレッドを使うか。
この処理は、Python + PyGTKなら、こうだ。
while gtk.events_pending():
gtk.main_iteration(1)
これでウィジェットは再描画もされる。
プログレスバーやラベルならquene_draw()とか別にいらない。
ググり方が悪くてruby用gtkのサイトから知ったのは内緒だ
というか、プログレスバーが全然更新されないので、重い処理中の 強制的イベントハンドラ開放を調べまくった俺。
ようやく回答にたどり着けた。
しかし俺の場合、実はプログレスバーが全然進捗していかない本当の原因は、
float()変換している値に対して整数値を ぶつけていたので、
結果としてprogressbar.set_fractionに入れる値が 整数、つまり0と1の二種類だけになっていた罠。
ちなみにスレッドも使ってみたんだが、結局join()でブロックするせいか効果がなかった。なかなか、Win32APIのようには行かないものだ。
やりかたが悪いんだろうか。
今回は、めんどくさくなって一瞬C言語(つかBCB)に手が伸びかけたが、Python & GTKの修練の為と思ってなんとか踏みとどまった。
ま、そういうわけで、俺と同じ目に遭っている人、あるいはこのことを忘れた自分、が必死で検索している時に備えて、GTK、再描画、イベント、Invalidateに相当、DoEvents、キュー、とかキーワードにしそうなのをここに列挙しておくtest。