Ściąganie pliku jako wątek, EaccessViolation :/


(Leszek Glinowiecki) #1

Witam.

Jestem początkujący w Delphi i natknąłem się na problem przy próbie stworzenia nowego wątku.

Zdefiniowałem nowy typ:

type

  Tdownload = class(TThread)

    protected

      procedure Execute; override;

  end;

Stworzyłem globalną zmienną:

download:Tdownload;

Przy próbie otwarcia wątku poleceniem:

download.Create(false);

Otrzymuję EAccessViolation. Działaniem nowego wątku kieruje:

procedure Tdownload.Execute;

begin

  DownloadFile(link,str2);

end;

Gdzie DownloadFile to procedurka ściagająca plik z Internetu.

Wątek się nie tworzy.


([alex]) #2

var download:Tdownload;

download:=Tdownload.Create(false);


(Leszek Glinowiecki) #3

Ok, poprawiłem według zaleceń.

Teraz nie ma błędu, ale... Wątek uruchamia się i od razu się kończy, nic się w programie nie wydarzy, nie uruchamia się procedura DownloadFile wewnątrz Tdownload.Execute :(.


([alex]) #4

Na jakiej podstawie to stwierdziłeś?

download:=Tdownload.Create(false);ShowMessage('Watek wystartował ale się nie skończył !'); [/code]Komunikat pokaże się natychmiast, ale watek wciąż działa.
Aby wyłapać kiedy się skończy, popatrz na zdarzenie OnTerminate, tez poczytaj na temat FreeOnTrerminate;

(Leszek Glinowiecki) #5

Wątek zaczyna się i od razu kończy gdyż widzę to w trakcie pracy w skompilowanym programie w oknie EventLog.

Pobieranie pliku powinno trwać, a niestety nawet się nie zaczyna. Nie mam pojęcia co może być źle.

Podeślę Ci źródło na PW.


([alex]) #6

Zacznij od tego że odpal tą funkcje bez wątku, jak zacznie działać to dopiero kombinuj z wątkiem.

Do ściągnięcia plików polecam TIdHttp (dla protokołu HTTP) lub TIdFtp (dla protokołu FTP) z darmowej biblioteki Indy, zamiast męczyć się z bublem od M$.


(Leszek Glinowiecki) #7

No właśnie bez wątku działa elegancko (no ale program podczas ściągania "nie odpowiada"). Spróbuję przepisać to na bibliotekę Indy, ale pewnie z moimi zdolnościami trochę to potrwa :). Dzięki za zainteresowanie.


([alex]) #8

Właściwie ja mam (zrobione do własnego użytku) to co próbujesz napisać w powiedzmy prawie zawodowym wydaniu :smiley:

Wystarczy na tej stronie prawy klawisz na link i wybierasz kopiuj adres odnośnika, mp3 natychmiast zaczyna się pobierać lub wstaje do kolejki pobierania. Sam program można zamknąć siedzi sobie w Tray'u i ściąga po kolei.