![]() |
Sicherstellen das Procedure abgearbeitet wurde
Guten Tag,
Ich komme immer wieder an eine Stelle an der ich sichergehen muss das Block1 vor Block2 ausgeführt wird. Block1 kann je nach Datenmenge zwischen 0.1s und 10s dauern. Der Benutzer erhält so oder so die Meldung "Bitte warten..". Der Benutzer kann während dieser Zeit nicht mit dem Programm arbeiten. Mir ist klar das dies nicht die sauberste Lösung ist. Da ich mich noch nicht mit Threads beschäftigt habe wäre mir ein Beispiel ohne Threads sehr willkomen. Wie kann ich am Punkt "warten" sicherstellen das Block1 abgearbeitet wurde ? Ich hatte nun schon mehrmals das Problem das Block2 ausgeführt wurde und Block1 noch nicht mit seiner Arbeit fertig war. Was in einer Exception endet.
Delphi-Quellcode:
Procedure Block1
begin // mach was.. end; //warten.. sicherstellen das Block1 fertig ist Procedure Block2 begin // mach was.. aber Block1 muss abgearbeitet sein. end; |
AW: Sicherstellen das Procedure abgearbeitet wurde
Ohne Threads wäre das sogar einfacher. Wenn alles im Hauptthread abläuft wartet dieser auf Abschluss:
Delphi-Quellcode:
Block1;
Block2; |
AW: Sicherstellen das Procedure abgearbeitet wurde
Bist Du sicher, dass Du keine asynchrone Verarbeitung in Deinem Programm hast? Ansonsten wird bei Aufruf von
Delphi-Quellcode:
immer Block1 vollständig ausgeführt, bevor es an Block2 geht.
Block1;
Block2; |
AW: Sicherstellen das Procedure abgearbeitet wurde
Hallo Int3g3r,
z.B. so:
Delphi-Quellcode:
Gruß, Andreas
Function Block1: Boolean;
begin Block1:= False; // mach was.. ... Block1:= True; end; Procedure Block2 begin // mach was.. aber Block1 muss abgearbeitet sein. end; ... //warten.. sicherstellen daß Block1 fertig ist MassageBox('Bitte warten etc.'); IF Block1 Then Block2; |
AW: Sicherstellen das Procedure abgearbeitet wurde
Zitat:
Delphi-Quellcode:
Ich bin mir hier einfach nicht sicher.
Procedure Block3
begin DelFilesFromDir; CopyFileInDirecory; end; procedure DelFilesFromDir(Directory, FileMask: string; DelSubDirs: Boolean); var SourceLst: string; FOS: TSHFileOpStruct; begin FillChar(FOS, SizeOf(FOS), 0); FOS.Wnd := Application.MainForm.Handle; FOS.wFunc := FO_DELETE; SourceLst := Directory + '\' + FileMask + #0; FOS.pFrom := PChar(SourceLst); if not DelSubDirs then FOS.fFlags := FOS.fFlags OR FOF_FILESONLY; // Remove the next line if you want a confirmation dialog box FOS.fFlags := FOS.fFlags OR FOF_NOCONFIRMATION; // Uncomment the next line for a "silent operation" (no progress box) // FOS.fFlags := FOS.fFlags OR FOF_SILENT; SHFileOperation(FOS); end; Da meist im hintergrund noch so viel abläuft auf was ich keinen direkten einfluss habe. Also ist hier auch sichergestellt das "DelFilesFromDir" ausgeführt und beendet wurde bevor "CopyFileInDirecory" ausgeführt wird? Auch Wenn das Löschen 10s in anspruch nimmt ? Besten Dank für die Hilfe! |
AW: Sicherstellen das Procedure abgearbeitet wurde
Zitat:
|
AW: Sicherstellen das Procedure abgearbeitet wurde
hi, ich bin der meinung das
Code:
hier ein mini problem darstellt.
SHFileOperation(FOS);
mit
Code:
sollte das problem gefixt sein. hoffe ich...
eineLeereVariable := SHFileOperation(FOS);
|
AW: Sicherstellen das Procedure abgearbeitet wurde
Zitat:
heutzutage nicht mehr üblich. Man würde es result zuweisen: result := false; usw. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz