| |
|
|
| Hab ein Problem - der Source zeigt bei mir das DeleteUrlCacheEntryA wohl nur einmal - beim Ersten Male - den Cache löscht. Zumindest sieht es so aus weil die Downloadabfragezeit nur einmal lange dauert - danach nur noch 0ms. Auch das Ergebnis wird nicht neu geladen. Wenn ich aber der URL z.B. nen ?+str$(gettickcount) anhänge erhalte ich natürlich jedes mal ein neues - richtiges - Ergebnis. Es sieht also aus als wenn DeleteUrlCacheEntryA nicht so arbeitet wie ich es hoffe - nähhmlich einfach immer den Cache für die URL löschen.
Was mache ich falsch? Es ist als ob die Info am Prozess klebt - selbst ein zweiter Thread löscht nix. (getestet mit eigener DLL) KompilierenMarkierenSeparieren {$cleq}
const url=http://ip.mxii.com
const target=ip.txt
cls
do {
getip()
settimer 1000
waitinput
killtimer
cls
}
end
getip {
long ms=gettickcount
external(wininet.dll,DeleteUrlCacheEntryA,url)
external(urlmon.dll,URLDownloadToFileA,0,url,target,0,0)
string s
assign #1,target
reset #1
input #1,s
close #1
erase #1
print ip:,s
print ms:,(gettickcount-ms)
}
Nicht XPSE-Code: KompilierenMarkierenSeparierenCLS
WHILE 1
GETIP()
SETTIMER 1000
WAITINPUT
KILLTIMER
CLS
ENDWHILE
end
PROC GETIP
var MS&=&GETTICKCOUNT
EXTERNAL(wininet.dll,DeleteUrlCacheEntryA,http://ip.mxii.com)
EXTERNAL(urlmon.dll,URLDownloadToFileA,0,http://ip.mxii.com,ip.txt,0,0)
var S$=
ASSIGN #1,ip.txt
RESET #1
INPUT #1,S$
CLOSE #1
ERASE #1
PRINT ip:,S$
PRINT ms:,(&GETTICKCOUNT-MS&)
endproc
|
|
|
| |
|
|
|
| Aha ich ahne URL$ ist nicht immer das richtige Handle für die zu löschende Datei - werde mal den Callback nutzen um herauszufinden wie das File im Cache sich nennt. |
|
|
| |
|
|
|
| Ok das klappt schonmal - mal schauen wie sich nun der cache verhält: KompilierenMarkierenSeparieren {$cleq}
cls
print downloadfile(http://ip.mxii.com,ip.txt)
waitkey
end
DownloadFile (string url,destinationFileName){
string content=
long dllh=usedll(wininet.dll)
long hInet = external(wininet.dll,InternetOpenA,myapp,0,nil,nil,0);
//print hinet:,hinet
long hFile = external(wininet.dll,InternetOpenUrlA,hInet,addr(url),nil,0,$80000000,0);
//print hfile,hfile
mem buf=1024
//int fh=assign(destinationFileName)
//openrw fh
long bytesread
do {
external(wininet.dll,InternetReadFile,hFile,buf,1024,addr(bytesread))
//print read:,bytesread
if bytesread>0 {
content=content+char$(buf,0,bytesread)
//blockwrite fh,buf,0,bytesread
} else { break }
}
//closerw fh
external(wininet.dll,InternetCloseHandle,hFile)
external(wininet.dll,InternetCloseHandle,hInet)
dispose buf
freedll dllh
return content
}
|
|
|
| |
|
|
|
| Funzt, kein Cache mehr. Nun kann ich das der Downloadunit beibringen... |
|
|
| |
|
|