Mam 2 projekty. Jeden jest budowany przez C++ Builder bez MFC Style. I innym jest VC++ MFC 11.Wątki są powolne, gdy dźwięk jest wyłączony
Kiedy tworzę wątek i tworzę cykl - powiedzmy, że ten cykl dodaje jeden do pozycji w pasku postępu - od 1 do 100 przy użyciu Sleep(10)
działa oczywiście zarówno dla C++ Builder, jak i dla C++ Builder. C++ MFC.
Teraz, Sleep(10)
to czekać 10 milisekund. OK. Ale problem jest tylko wtedy, gdy mam otwarty odtwarzacz multimedialny, Winamp lub cokolwiek innego, co produkuje "Dźwięk". Jeśli zamknę wszystkie odtwarzacze multimedialne, winampy i inne programy dźwiękowe, moje wątki będą wolniejsze niż 10 milisekund.
Trwa jak 50-100 ms/each
. Jeśli otworzę dowolną muzykę, działa ona normalnie tak, jak się spodziewałem.
Nie mam pojęcia, dlaczego tak się dzieje. Najpierw pomyślałem, że popełniłem błąd w aplikacji MFC, ale dlaczego C++ Builder również zwalnia?
I tak, jestem pewny, że jest to związane z dźwiękiem, ponieważ nawet zmieniłem kształt okien, wyłączyłem wszystko. W końcu odkryłem ten problem z dźwiękiem.
Czy mój kod coś potrzebuje?
Aktualizacja:
Teraz śledzę kod i okazało się, że stosowane w takich dziedzinach Sleep(1)
czekać 1 milisekundy. Powodem tego jest przesunięcie obiektu z lewej na prawą. Jeśli usunę ten sen, ruch nie pojawi się, ponieważ jest bardzo szybki. Więc powinienem użyć Sleep(1)
. Z Sleep(1)
, jeśli dźwięk jest na niż działa. Jeśli dźwięk jest wyłączony niż jest bardzo wolny.
for (int i = 0; i <= 500; i++) {
theDialog->staticText->SetWindowsPosition(NULL, i, 20, 0, 0);
Sleep(1);
}
Propozycje w tym zakresie są naprawdę mile widziane. Co powinienem zrobić?
Wiem, że to niewłaściwy sposób. Powinienem użyć czegoś, co jest właściwe i ważne. Ale co dokładnie? Która funkcja lub klasa pomaga mi płynnie przenosić tekst statyczny z jednej pozycji na drugą?
Również zmiana priorytetu wątku nie pomogła.
Aktualizacja 2:
Update 1 jest inna kwestia :)
Interesujące. Czy priorytet procesu jest taki sam, gdy zauważysz różnicę? – Brad
Priorytety procesów są takie same. Drugą interesującą rzeczą jest to, że jeśli otworzę odtwarzacz multimedialny (ale nie odtwarzam muzyki), mój program wątkowy działa z 2% procesora i wątku działa. Jeśli zamknę odtwarzacz, natychmiast zwolnię i zajmie 0% mocy procesora. – xangr
Może to być spowodowane procesorami dławiącymi częstotliwość procesora. – johnathon