Activity

Of course you can support multiple start events. Before each start, List & Label checks if a print thread is running, and stops it if necessary with an abort event.

Designer-Thread

Print-Thread

Start-Event:

•             Copies the start parameter of the callback

•             Starts the print thread and waits on signal that it is ready (Event)

 

 

starts:

•      sets process status internally to RUNNING

•      indicates change of state per SetEvent(hEvent) to List & Label

•      indicate readiness

returns to List & Label

 

From now on both the designer and preview/export run in parallel.

Normal designer execution.

Abort

•      calls LlPrintAbort() for the print job and returns

Status Query

•      returns the value of the process status

Completion

•      calls LlPrintAbort() if necessary and waits for thread to end

•      create new job

•      starts print loop with changes already mentioned above

When printing is complete:

•      set internal process state to STOPPED

•      indicate state change per SetEvent(hEvent) to List & Label

•      end job

•      delete project file

 

It is advisable to use a unique structure for both output types, and then provide the address of the structure using LL_OPTION_DESIGNERPREVIEWPARAMETER and LL_OPTION_DESIGNEREXPORTPARAMETER to List & Label. This structure should contain:

•      a pointer to a object that manages the data source (if necessary i.e. possible)

•      a synchronization object (CRITICAL_SECTION)

•      the thread handle of the thread in progress

•      the job handle of the worker thread

•      variables as copies of the start parameter

If your data source only allows single threaded access, you must set LL_OPTION_DESIGNERPRINT_SINGLETHREADED to TRUE. This will be used by List & Label, so that during the preview calculation no export is possible, and vice versa.