Pozorny zwis aplikacji - jak go wyeliminowac?

0

Przypuscmy, ze program pakuje jakies zbiory, ktore w rezultacie spowoduja powstanie pliku wynikowego o stosunkowo duzej objetosci (np. 500MB). W trakcie wykonywania takiej czynnosci (ktora dlugo trwa) program jest "zajety", tzn. jak sie uruchomi inna aplikacje, ktora nalozy sie na program po czym zechce sie do niego wrocic klikajac na pasku zadan, to program nie przywraca sie - wyglada jakby sie zawiesil a w rzeczywistosci wykonuje jakas operacje.

Jak sprawic, aby taka sytuacja nie miala miejsca ?

0

Hehe, nieustanne wykonywanie operacji i nieodpowiadanie na dzialania uzytkownika, to wlasnie zawieszenie sie :). Trzeba stworzyc watek. To co robi program umiesc w oddzielej procedure o nazwie np. Wykonywanie. A ta procedure wywolaj tak:

var aa: Dword;
bagin
CreateThread(nil, 0, @Wykonywanie, nil, 0, aa);
end;

0

ew. w pętli Application.ProcessMessages;

0

Hehe, nieustanne wykonywanie operacji i nieodpowiadanie na dzialania uzytkownika, to wlasnie zawieszenie sie :). Trzeba stworzyc watek. To co robi program umiesc w oddzielej procedure o nazwie np. Wykonywanie. A ta procedure wywolaj tak:

var aa: Dword;
bagin
CreateThread(nil, 0, @Wykonywanie, nil, 0, aa);
end;

Cos nie dziala. :( Wywala blad "Variable required" za @Wykonywanie. Co jest nie tak ?

0

ew. w pętli Application.ProcessMessages;

Jak to dokladnie uzywac ? Newb ze mnie straszny. :(

0

:P

no to masz np. cus takiego:

for i:=0 to 1500 do
begin
Application.ProcessMessages;
rób cos tam;
end;

ale raczej wątki to lepszy pomysl ...

0

No to wiem juz cos wiecej - zaraz ide testowac ;)

A jak to w koncu jest z tymi watkami?

0

Wielkie dzieki Panowie! Application.ProcessMessages spelnilo moje wymagania... po prostu o to chodzilo. :-)

Pozdrawiam i raz jeszcze thx!

P.S. Nadal nurtuja mnie te watki ;)

0

A jak to w koncu jest z tymi watkami?

http://4programmers.net/view.php?id=25

0

Cos nie dziala. :( Wywala blad "Variable required" za @Wykonywanie. Co jest nie tak ?

:-0 Nie wiem. U mnie dziala pieknie, tylko oczywiscie begin a nie began. Jakiegio Delphi uzywasz?

0

Cos nie dziala. :( Wywala blad "Variable required" za @Wykonywanie. Co jest nie tak ?

:-0 Nie wiem. U mnie dziala pieknie, tylko oczywiscie begin a nie began. Jakiegio Delphi uzywasz?

Delphi2

0

Witam

Mam program który wykonuje sporo obliczeń niestety gdy zacznie on liczyć to wygląda jakby się zawiesił tzn. nie mogę zminimalizować okna czy przełączyć zakładek. Zastosowałem coś takiego :

for i:=0 to 1500 do
begin
Application.ProcessMessages;
rób cos tam;
end;

Ale niestety bez rezultatów czy jest jakiś sposób aby program działał lepiej?? Za wszelkie porady z góry dzięki.

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