Witam
Piszę program który ma zmierzyć czas wykonywania procesu (celem jest porównanie wydajności tego samego kodu skompilowanego przez różne kompilatory).
Program działa następująco:
1.Uruchamiany zostaje proces z atrybutem crate_suspend
2.Pobierana zostaje wartość queryperformancefrequency
3.Ustawiam priorytet procesu: SetPriorityClass //Zastanawiam się którego priorytetu najlepiej użyć (REALTIME?:) )
4.Startuje queryperformancecounter potem startuje proces resumethread
5.Wykonuje się pętla:
while(exitCode == STILL_ACTIVE) {
getExitCode
}
SendDlgItemMessage..PBM_STEPIT..
...
Odnośnie tej pętli - nie podoba mi się jej wpływ na cały program:
Pomiar wykonuje się n razy i po każdym pomiarze czasu wykonania procesu powinien się zwiększyć pasek postępu (sendmessage zwraca kolejne pozycje paska ale sam pasek postępu się nie rusza, dopiero po ukończeniu pętli docierają wszystkie komunikaty i pasek ustawia się na ostatniej pozycji)
Oprócz tego system komunikuje że program nie odpowiada - wiem że to złe rozwiązanie tylko nie wiem jak to inaczej rozwiązać :(
Proszę o radę jaki priorytet ustawić testowanym procesom oraz lepsze rozwiązanie/poprawę miejsca z pętlą (krok 5). Może jeszcze w skrócie jak się ma QueryPerformence do wielozadaniowości i czy nadaje się do tego celu czy też może jest jakaś lepsza funkcja?.
zastąpiłem pętle funkcją WaitForSingleObject ale problem dalej istnieje ;/
Sprawdziłem dla krótszych programików i działa jak należy... Problem jest w tym że po ~5sek w pętli z pkt.5 okno robi się nie aktywne (na pasku pisze not responding) i przestają być <ort>odświerzane </ort>kontrolki - jak temu zaradzić??