Verfasst: 28.12.2004 19:43
Wieso sollte man nicht?deMattin hat geschrieben:Denn bei Programmen mit Webabfragen/Downloads kommt man an Programmierung mit Threads ja leider nicht vorbei.
Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Wieso sollte man nicht?deMattin hat geschrieben:Denn bei Programmen mit Webabfragen/Downloads kommt man an Programmierung mit Threads ja leider nicht vorbei.
Schlechte programmierung. Einzig und allein das opennetworkblabla() läßt das programm anhalten. Wenn du das Beispiel ansiehst: Du mußt in regelmäßigen abständen immer das download-doch-mal-ein-bischen-Routine aufrufen. Zwischenzeitlich kannst du mit window-event was machen.deMattin hat geschrieben:Na ganz einfach - weil die Webabfragen ja schon mal etwas dauern können und während dessen keine Userevents vom Programm angenommen werden.
Möchte ich nicht ausschliessen (zumindest in meinem Fall)Schlechte programmierung...
Code: Alles auswählen
DoDownload=#False:StartDownload=#False
Repeat
If DoDownload=#False
event=WaitWindowEvent()
Else
Delay(1)
event=WindowEvent()
EndIf
If event
;{ Window-event-handling
;}
EndIf
If StartDownload
StartDownload=#False
If HTTP_OpenUrl(Get.HTTPGetId,File$,url,WebPass$,ProxyServer$,ProxyPort,ProxyPass$,0)
DoDownload=#True
Progress=0
EndIf
EndIf
If DoDownload
If HTTP_ReceiveData(Get)
;WindowEvent()
a=HTTP_GetProgress(Get)
If a<>Progress
PrintN("Progress: "+Str(a)+"%")
Progress=a
EndIf
;if want abort
; http_closeurl(get$)
; printn("Abort")
; break 2
;endif
Else; Fertig
DoDownload=#False
;Download fertig
HTTP_CloseURL(Get)
;{ Check
Select HTTP_GetError(Get)
Case #URLError_OK:PrintN("Download complete")
;{for memorydownload
; OutBuffer=HTTP_GetOutBuffer(Get)
; Size=HTTP_GetFileSize(Get)
; Print("save to "+File$+".mem."+GetExtensionPart(File$))
; API_FileCreate(out.API_FileHandle,File$+".mem."+GetExtensionPart(File$))
; API_WriteData(out,OutBuffer,Size)
; API_CloseFile(out)
; FreeMemory(outbuffer)
;}
PrintN(" done")
PrintN("")
PrintN("FileSize:"+Str(HTTP_GetFileSize(Get)))
PrintN("FileReceived:"+Str(Get\Received))
PrintN("FileDate:"+FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss",HTTP_GetFileDate(Get)))
Case #URLError_OutOfMemory:PrintN("Out of memory")
Case #URLError_CantCreateFile:PrintN("Can't create file")
Case 301;Moved permanently
PrintN("Moved permanently:"+HTTP_GetNewLocation(Get))
HTTP_ChangeURL(Get,HTTP_GetNewLocation(Get))
If HTTP_ReConnect(Get); neu anfordern
DoDownload=#True
Else
PrintN("Can't connect")
EndIf
Case 302;Moved temporarily
PrintN("Moved temporarily:"+HTTP_GetNewLocation(Get))
HTTP_ChangeURL(Get,HTTP_GetNewLocation(Get))
If HTTP_ReConnect(Get); neu anfordern
DoDownload=#True
Else
PrintN("Can't connect")
EndIf
Case 305;Use Proxy
PrintN("Use Proxy:"+HTTP_GetNewLocation(Get))
Case 401;unauthorized
PrintN("Unauthorized:"+HTTP_GetAuthenticateRealm(Get))
Print(" UserName:"):user$=Input():PrintN("")
Print(" Password:"):pass$=Input():PrintN("")
If user$
WebPass$=HTTP_CryptedUserPass(user$,pass$)
HTTP_ChangeWWWAuthenticate(Get,WebPass$)
If HTTP_ReConnect(Get); neu anfordern
DoDownload=#True
Else
PrintN("Can't connect")
EndIf
Else
PrintN(" abort")
EndIf
Case 407;Proxy Authentication Required
PrintN("Proxy Authentication Required:"+HTTP_GetAuthenticateRealm(Get))
Print(" UserName:"):user$=Input():PrintN("")
Print(" Password:"):pass$=Input():PrintN("")
If user$
ProxyPass$=HTTP_CryptedUserPass(user$,pass$)
HTTP_ChangeProxyAuthenticate(Get,ProxyPass$)
If HTTP_ReConnect(Get); neu anfordern
DoDownload=#True
Else
PrintN("Can't connect")
EndIf
Else
PrintN(" abort")
EndIf
Default
PrintN("ServerError:")
PrintN(Str(HTTP_GetError(Get))+" "+HTTP_GetErrorMessage(Get))
EndSelect
;}
EndIf
EndIf
ForEver
Code: Alles auswählen
If HTTP_OpenUrl(Get.HTTPGetId,File$,url,WebPass$,ProxyServer$,ProxyPort,ProxyPass$,1024) Code: Alles auswählen
;Event: Abruch
http_closeurl(get$)
printn("Abort")
break 2 ; brauch ich eigtl. hier nicht, oder?
DoDownload=#False
;EndEvent
Überbleibsel von anderen Code.bluejoke hat geschrieben: Das "break 2" heißt, das 2 Schleifen abgebrochen werden, oder wie?