2015-09-07 11 views
5

Ich versuche, ein vb6 prog zu machen, um auf die Erstellung einer PDF-Datei zu warten. Im Moment mache ich gerade eine Pause von 3 Sekunden wie folgt aus:Warten Sie, bis eine Datei mit einem Timeout erstellt wurde

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 

aber einige Male die PDF-Erstellung dauert mehr als 3 Sekunden. Also würde ich gerne warten, bis die Datei erstellt wurde, aber mit einem Timeout (sagt 10sec). Ich ziehe es vor, die Wartezeit nicht zu verlängern, da dies tausend Mal ausgeführt wird.

Antwort

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 und wo ist die Zeitüberschreitung ??? –

+0

Entschuldigung, ich habe die Zeitüberschreitung nicht gelesen. Ich habe die Schlaf-API mit einem Zähler benutzt, wenn 10 erreicht wurde, und dann die Funktion verlassen. Hoffe, das kann Ihnen helfen – MadAntrax

+0

Vielen Dank @MadAntrax, ich bin ein bisschen neu in der alten VB6 :) Also Schlaf ist ein Befehl von der kernel32.dll zur Verfügung gestellt? –

0

Ich habe keine VB6 env in dem von mir gerade jetzt ... aber egal ... Ich habe ein paar kleine Änderungen an Ihrem ursprünglichen Code. Wenn der API-Ansatz nicht verwendet werden kann, können Sie dies versuchen:

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

Änderte die Zeitverzögerung auf 10, legte den FSO Check innerhalb der Weile. Wenn die Datei gefunden wurde, brechen Sie die While-Schleife ab, sodass die gesamten 10 Sekunden nicht verstreichen müssen, wenn die Datei früher angezeigt wird. Fügen Sie der falschen Seite der IF eine DoEvents-Anweisung hinzu, damit Sie die CPU nicht während der Ausführung sperren. g'luck. –

Verwandte Themen