私は2つのプロジェクトを持っています。1 つは、MFC スタイルなしで C++ Builder によってビルドされます。もう1つはVC++ MFC 11です。
スレッドを作成してサイクルを作成すると、たとえば、このサイクルがプログレスバーの位置に 1 を追加するとします。これを使用Sleep(10)
すると、もちろん C++ Builder と C++ MFC の両方で機能します。
さて、Sleep(10)
10ミリ秒待ちます。わかった。しかし、問題は、メディアプレーヤー、Winamp、または「サウンド」を生成するその他のものを開いている場合のみです。すべてのメディア プレーヤー、winamp、およびその他のサウンド プログラムを閉じると、スレッドの速度が 10 ミリ秒未満になります。
のようにかかります50-100 ms / each
。音楽を開くと、期待どおりに正常に機能します。
なぜこれが起こっているのか分かりません。最初は MFC アプリ内でミスをしたと思ったのですが、なぜ C++ Builder も遅くなるのでしょうか?
はい、ウィンドウを再フォーマットし、すべてを無効にしたので、サウンドに関連していると確信しています。最後に、その音の問題を発見しました。
私のコードには何かが必要ですか?
更新:
さて、コードをたどってみるとSleep(1)
、そのような領域で 1 ミリ秒待機していたことがわかりました。その理由は、オブジェクトを左から右に移動するからです。このスリープを削除すると、非常に高速であるため、移動が表示されません。だから、私は使用する必要がありますSleep(1)
。でSleep(1)
、オーディオがオンの場合は機能します。オーディオがオフの場合、非常に遅くなります。
for (int i = 0; i <= 500; i++) {
theDialog->staticText->SetWindowsPosition(NULL, i, 20, 0, 0);
Sleep(1);
}
したがって、これに関する提案は本当にありがたいです。私は何をすべきか?
私はこれが間違った方法であることを知っています。適切で有効な別のものを使用する必要があります。しかし、正確には何ですか?静的テキストをある位置から別の位置にスムーズに移動するのに役立つ関数またはクラスはどれですか?
また、スレッドの優先度を変更しても効果はありませんでした。
更新 2 :
更新1は別の質問です:)