私はVisual Studio for C++、Windowsフォームアプリケーションで作業します。私はボタンを赤く塗りつぶし、3秒待ってから青く塗ります。C++関数Sleep()はコードの前に実行します
button1->BackColor = System::Drawing::Color::DarkRed;
Sleep(3000);
button1->BackColor = System::Drawing::Color::CornflowerBlue;
しかし、Sleep()関数は最初の行の前に実行されます(赤く塗りつぶします)。プログラムは3秒待ってから始まり、時間の経過後に青色のボタンを塗ります。コードの赤い部分を描くのに時間がないようです。個別に、赤い絵画はうまく動作します。 私は他の遅延ソリューションも試しました。例:スリープ()関数は、コード::ブロックのコンソールスクリプトに完璧に働いているので、
int wait = clock() + 2 * CLOCKS_PER_SEC;
while (clock() < wait) {}
Visual StudioのC++での問題のようです。解決策はありますか?
メインスレッドをスリープ状態にして、バックグラウンドカラーを赤に更新する時間がないと仮定しています。 –
スリープ機能は、一定期間プログラムの実行を停止します。あなたの場合、ドローコールの前に起こります。 draw呼び出しごとに実行される更新関数を使用する必要があります – Striker
ボタンは強制的に再描画する必要があります。デフォルトではパフォーマンス上の理由から即座にボタンを実行せず、 'Sleep()'を呼び出すとその前にスレッドを中断します起こる.NETを使用している場合 - 明確にしていない - 'Sleep()'の呼び出しの前に 'button1-> Refresh()'を追加してみてください。 – Peter