2015-09-07 50 views
5

Sto provando a fare in modo che un prog vb6 attenda la creazione di un file pdf. In questo momento mi sto solo facendo una pausa di 3 sec così:Attendi che un file venga creato con un timeout

startTime = Time 
endTime = TimeValue(startTime) + TimeValue(TimeSerial(0,0,3)) 
While endTime > Time 
Wend 

If FSO.FileExists(sPdfFileName) Then 
    OkCreatedPDF = True 
Else 
    OkCreatedPDF = False 
End If 

ma alcune volte la creazione di PDF richiede più che 3 sec. Quindi mi piacerebbe aspettare che il file venga creato ma con un timeout (dice 10 secondi). Preferisco non prolungare il tempo di attesa poiché verrà eseguito migliaia di volte.

risposta

2
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) 

Function GeneratePDF() 
    Dim sTimeout as Integer 

    Call YourPDFroutine() 

    StatusLabel.Caption = "Wait until PDF is finished..." 
    While FSO.FileExists(sPdfFileName) = False 
     sTimeout = sTimeout + 1 
     Sleep 1000 
     If sTimeOut > 10 Then 
      OkCreatedPDF = False 
      StatusLabel.Caption = "ERROR: Timeout!" 
      Exit Function 
     End If 
    Wend 

    OkCreatedPDF = True 
    StatusLabel.Caption = "The PDF " & sPdfFileName & " was generated!" 
End Function 
+0

Err e dove si trova il timeout ??? –

+0

Siamo spiacenti, non ho letto il timeout. Ho usato la sleep API con un contatore, se raggiungi 10 poi esci dalla funzione. Spero che questo possa aiutarti – MadAntrax

+0

Grazie @MadAntrax, sono un po 'nuovo al vecchio VB6 :) Quindi il sonno è un comando fornito dal kernel32.dll? –

0

Non ho un VB6 in arrivo da me proprio ora ... ma a prescindere ... ho apportato qualche modifica al codice originale. Nel caso in cui l'approccio API non può essere utilizzato, è possibile provare questo:

startTime = Time 

endTime = TimeValue(startTime) + TimeValue(TimeSerial(0,0,10)) 

While endTime > Time 

If FSO.FileExists(sPdfFileName) Then 
    OkCreatedPDF = True 
    Exit While 
Else 
    OkCreatedPDF = False 
    DoEvents() 
End If 

Wend 
+0

Cambiato il tempo di ritardo a 10, inserire il controllo FSO nel frattempo. Se il file è stato trovato, interrompi il ciclo while in modo che non passino tutti i 10 secondi se il file viene visualizzato prima. Aggiungi un'istruzione DoEvents al lato falso dell'IF in modo da non incasinare la CPU mentre è in esecuzione. g'luck. –