Einzelnen Beitrag anzeigen

Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#12

Re: Eigene Instanz von Printers / Fragen zum Druck

  Alt 3. Jun 2008, 09:26
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
Frederik
  Mit Zitat antworten Zitat