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.