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

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.

var download:Tdownload;

download:=Tdownload.Create(false);

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 :(.

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;

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.

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$.

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.

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.