Pomiar czasu wykonania procesu

0

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ć??

0

zablokowałeś sobie w tej pętli obsługę kolejki komunikatów. pętlę umieść w osobnym wątku, lub w pętli umieść obsługę kolejki.
PerformanceTimer to chyba jedyna metoda na pomiar z tak wysoką rozdzielczością (są oczywiście inne, ale i tak opierają się o PerformanceTimer).

0

Wielkie dzięki to rozwiązało problem z pętlą :)

ŁF napisał(a)

PerformanceTimer to chyba jedyna metoda na pomiar z tak wysoką rozdzielczością (są oczywiście inne, ale i tak opierają się o PerformanceTimer).

Program ma korzystać wyłącznie z WinAPI PerformanceTimer to chyba klasa na razie zostaje przy QueryPerformanceCounter.

0

PerformanceTimer to skrót myślowy. QPT == QPC

1 użytkowników online, w tym zalogowanych: 0, gości: 1