Man ist ja nicht gezwungen die Funktion Printers() zu benützten, sondern kann ja mit FMyPrinter := TPrinter.Create ein neues Objekt anlegen, dass dann auch ein eigenes Printer-
Handle hat.
Im Thread dürfen dann aber die Funktionen Printer, SetPrinter und AssignPrn nicht benützt werden, da diese die globale Variable FPrinter benützen.
Könnte nun aber sein, dass gleichzeitiges Drucken aus Hauptanwendung und Thread ein Problem ergibt, da beiden das gleiche Printer-
Handle von Windows zugeteilt wird. (nur wenn der gleiche Drucker angesprochen wird)
Dann sollte der Thread so lange warten, bis der Hauptthread fertig ist:
Delphi-Quellcode:
procedure TMyThread.CheckPrn;
var
i : Integer;
begin
if myprinter.Handle <> Printer.Handle then Exit; // versch. Drucker -> versch. Printjobs
// 3 Mal prüfen um die Sicherheit zu erhöhen, den Hauptthread "auf dem falschen Fuss"
// zu erwischen
//
for i := 0 to 2 do
begin
// Prüfen, ob Hauptthread gerade druckt
while Printer.Printing do
Sleep(500);
end;
Sleep(0); // Rechenzeit abgeben
end;
end;
Für den Hauptthread braucht man wahrscheinlich keine Vorkehrungen zu treffen; weil wenn es dann zu einer Fehlermeldung kommt, kann der Benutzer kurz warten und den Druck erneut auslösen.