私は2つのプロジェクトを持っています。 1つはMFCスタイルのないC++ Builderによって構築されています。そして、他のものはVC++ MFC 11です。音声がオフのときスレッドが遅い
スレッドを作成してサイクルを作成すると、このサイクルでプログレスバーの位置に1を加算します。つまり、Sleep(10)
を使用して1から100になります。C++ BuilderとC++ MFC。
ここで、Sleep(10)
は10ミリ秒待機します。 OK。しかし、問題は私がオープンメディアプレーヤー、Winamp、または "サウンド"を生成する何かを持っている場合のみです。すべてのメディアプレーヤー、Winamp、およびその他のサウンドプログラムを閉じると、スレッドが10ミリ秒より遅くなります。
50-100 ms/each
のようになります。もし私が音楽を開くと、それは期待通りに正常に動作します。
なぜこのようなことが起こっているのかわかりません。私は最初にMFC Appの内部で間違いを犯したと思ったが、なぜC++ Builderも遅くなったのだろうか?
はい、私はそれが私の窓を再構成し、すべてを無効にしているので、それは音に関連していると確信しています。最後に、私はその問題を発見しました。
私のコードに何か必要がありますか?
更新:
は今、私は、コードをたどると、私は1ミリ秒を待つために、このような分野でSleep(1)
を使用したことが分かりました。その理由は、オブジェクトを左から右へ移動させるからです。私はこの睡眠を削除すると、それは非常に高速であるため、移動が表示されません。だから、私はSleep(1)
を使うべきです。 Sleep(1)
の場合、音声がの場合はになります。音声がからを除いて非常に遅い場合。
for (int i = 0; i <= 500; i++) {
theDialog->staticText->SetWindowsPosition(NULL, i, 20, 0, 0);
Sleep(1);
}
です。これに関する提案は本当に感謝しています。私は何をすべきか?
これは間違った方法です。私は適切で有効な何かを使うべきです。しかし、正確に何ですか?静的テキストをある位置から別の位置にスムーズに移動させるために役立つ関数やクラスはどれですか?
また、スレッドの優先度を変更すると、は役に立ちませんでした。
アップデート2:
Update 1には、別の質問:) 少なくとも 10ミリ秒間
興味深い。あなたのプロセスの優先順位は、違いに気づいたときでも同じですか? – Brad
プロセスの優先順位は同じです。 2番目の興味深いのは、もし私が(音楽を再生していない)メディアプレーヤーを開くと、私のスレッドプログラムはCPUとスレッドの2%で動作します。メディアプレーヤーを閉じると、即座に減速し、CPUの使用率は0%になります。 – xangr
これは、プロセッサがCPUの周波数を絞っていることが原因である可能性があります。 – johnathon