Ablauf

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_­SINGLE­THREADED 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.