Natürlich können Sie mehrere Start-Events erhalten. Vor jedem Start überprüft List & Label, ob schon ein Druck läuft, und stoppt diesen gegebenenfalls per Abbruch-Event.
Designer-Thread: |
Druck-Thread: |
Start-Event: kopiert die Startparameter des Callbacks startet den Druck-Thread und wartet auf das Signal, dass dieser bereit ist (Event). |
|
|
startet: setzt Prozesszustand intern auf RUNNING signalisiert Zustandsänderung per SetEvent(hEvent) an List & Label signalisiert Bereitschaft |
kehrt an List & Label zurück |
|
Ab jetzt laufen Designer und Preview/Export parallel.
Üblicher Designer-Ablauf. Abbruch ruft LlPrintAbort() für den Druckjob auf und kehrt zurück Statusabfrage gibt den Wert des Prozesszustands zurück Finalisieren ruft im Bedarfsfall LlPrintAbort() auf und wartet auf das Ende des Threads |
erzeugt neuen Job startet Druckschleife mit oben erwähnten Änderungen Wenn Druck fertig: setzt Prozesszustand intern auf STOPPED signalisiert Zustandsänderung per SetEvent(hEvent) an List & Label beendet Job löscht Projektdatei |
Am besten ist es, wenn Sie für jeden der beiden Ausgabetypen eine eigene Struktur haben, und die Adresse der Struktur über LL_OPTION_DESIGNERPREVIEWPARAMETER und LL_OPTION_DESIGNEREXPORTPARAMETER an List & Label übergeben. Diese Struktur enthält dann sinnvollerweise:
• einen eigenen Zeiger auf ein Objekt, das die Datenquelle verwaltet (wenn nötig bzw. möglich)
• ein Synchronisationsobjekt (CRITICAL_SECTION)
• das Thread-Handle des Arbeiter-Threads
• das Job-Handle des Arbeits-Threads
• Variablen als Kopie der Startparameter
Wenn Sie die Datenversorgung nur in einem Thread durchführen können weil z. B. die Datenquelle single-threaded ist, müssen Sie die Option LL_OPTION_DESIGNERPRINT_SINGLETHREADED auf TRUE setzen. Dies wird für List & Label dann dazu benutzt, dass während der Preview-Berechnung kein Export möglich ist und umgekehrt.