Guten Morgen,
@sx2008: Das mit der zweiten Instanz hatte ich ja in Beitrag #3 schon vermutet, und 3-Timeouts bevor es kracht bzw. ein Job verloren geht sind ein No-Go. Trotzdem Danke für die Anregung!
Zitat von
franktron:
Warum baust du nicht eine Drucker Warteschlange und sendest dann vom Hauptprogramm und vom Thread darein und die Warteschlange arbeitet die dann ab.
Gute Idee, so etwas ähnliches fiel mir auch gestern Abend ein.
Ich habe mir die Printers.pas mal genau angesehen, die ist tatsächlich nicht Thread-Safe, weil sie intern Canvas, Font etc nutzt. Zusätzlich sind im QualityCentral mehrere QCs für Printers.pas die sich auf nicht threadsicheren Funktionen beziehen...
Ich werde wohl eine Warteschlange schreiben, muß mal sehen, wie ich dann mit Fehlern dort umgehe. Prinzipiell wollte ich im Thread den Druck auslösen, damit ich auch dort den Fehlercode erhalte - fürs Loggen und um ggf. die Threadausführung zu stoppen.
Wie würdet Ihr die Warteschlange angehen?
Ich denke in Richtung eines eigenen Threads mit Synchronized Callbacks für Fehlerreport, internen StringList für eine eindeutige Printjob-Id (vielleicht auf Basis von UnixDateTime) und der eigentlichen Druckfunktion.
Gibt es eigentlich eine Liste, welche Funktionen etc. threadsafe sind? Außerdem frage ich mich, wenn es nicht threadsafe ist von einem Thread auf die
VCL unsychronisiert zuzugreifen, wie ist es umgekehrt? z.b. wenn der TThread einer Prozedur namens Foo; hat. Kann ich die ohne Probleme von seiten des
VCL-Mainthreads callen?
Gruß und vielen Dank
Assertor