Spore obcią?żenie

0

Witam
Napisałem programik, który ma kilka petli. Wykonywane są tam różne porównania i operacje dodawania. Wykonanie tych operacji zajmuje kilka lub wiecej minut dlatego jest tam wskaźnik postępu. I teraz mam taki problem: jeżeli skompiluje program w BCB6 wszystko działa dobrze pętle się wykonują a ProgressBar pokazuje postępy obliczeń. Jednak jeżeli "odpalę" już ten program poza BCB6 zaczynają się problemy: pętla się wykonuje ale pasek postępu tak w połowie lub wcześniej przestaje dawać znaki "życia". Nie mówiac już o tym że np. umieszczony w tej aplikacji zegarek również przestaje działać aż do skończenia wykonywania się operacji. Próbowałem odświeżania ale daje nie ciekawe efekty. Zbyt czeste odświeżanie powoduje mruganie, a rzadsze nie zawsze się wykona. Może ktoś ma jakiś pomysł rozwiązania tego problemu. Trochę pomaga zwiększenie priorytetu ale tu pojawia się moje drugie pytanie: jak zmienić priorytet z poziomu programu?
Pozdrawiam.

0

Mam identyczny problem. Program przetwarza 600MB plik danych. Pasek postepu zatrzymuje sie na 1% i do zakonczenia pracy nic sie nie zmienia. Wiec tez jestem zainteresowany rozwiazaniem tego problemu.

0

A w jakim watku wykonujecie obliczenia? W glownym?!!!

Jesli w glownym, to zle - tak sie nie robi. Program sie zachowuje prawidlowo :). Na dlugie obliczenia zapuszcza sie osobny watek, zeby aplikacja mogla normalnie przetwarzac komunikaty Windows. Jesli zablokujesz glowny watek dluga petla, to komunikaty nie beda sie przetwarzac w ogole lub beda przetw. zbyt wolno (zalezy czy w petli umiescisz gdzies odpowiednie odwolania do systemu - np. jak dasz refresha, to czasem niektore komunikaty przetworzy i dlatego na poczatku progress bar bedzie dzialal dobrze).

0

aaaaaaaaaaaaaaaa........ no chyba ze tak.........niby logiczne...... :]

0

Ale jeśli już zostaje się w wątku głównym - użyliście aby Application->ProcessMessages?
Umieszczone tego w czasochłonnej pętli na ogół pomaga, bo umożliwia przetwarzenie komunikatów.

0

Umieszczone tego w czasochłonnej pętli na ogół pomaga, bo umożliwia przetwarzenie komunikatów.

Ale spowalnia petle. :-P

0

Fakt, spowalnia, ale doświadczenie podpowiada mi, że spadek wydajności nie jest tutaj rażący.
Jeśli więc nie zależy nam na każdej sekundzie, możemy zaryzykować.

0

Duzego spadku wydajnosci nie bedzie, poniewaz App->PM(), sprawdzi ilosc komunikatow w kolejce i po kolei je przetwarza. Komunikatow tych bedzie bardzo malo (jesli beda jakiekolwiek) np WM_MOUSEMOVE. Jesli zalezy wam jednak bardzo na szybkosci to nie wywolujcie PM przy kazdej iteracji, tylko co jakis czas, np co 1sek.

0

Mam jeszcze pytanko: jak z poziomu programu zmienić jego priorytet w Win XP?

0

Mozesz sprobowac SetPriorityClass(). Podajesz w parametrach uchwyt do procesu i priorytet procesu. Pod xp powinno dzialac. Wiecej na <url>msdn.microsoft.com</url>

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