Many DQMH developers (including myself!) encounter the stumbling block of firing requests before a module is "ready". We assume that the following code is sufficient for starting and synchronizing a module:
The 'Synchronize Module Events' VI ensures that request event references are valid, but it doesn't do anything about ensuring that the module is actually ready. One very common scenario is a module Main VI that includes code in the 'Initialize' frame of the MHL that fires private events to initialize Helper Loops. If the VI that called Start Module isn't waiting on the Module Did Init broadcast, then it could immediately fire a request after calling Synchronize Module Events, and if a helper loop is registered for that event, then helper loop could run the event frame for that fired event before the MHL has had a chance to fire the private event to initialize the helper loop. There are many other possible pitfalls, but this is one of the more common ones I've seen.
To solve this issue, I think DQMH should ship with a Public API VI that is a wrapper for Start Module + Synchronize Module Events, but includes the extra step of waiting for 'Module Did Init'. The module author needs to ensure that the Module Did Init broadcast is called after all necessary initialization code... if they do so, then it is "safe" to begin calling events externally.
Here's my proposed interface for the Start Module and Wait for Initialization VI:
And my proposed implementation:
If this VI shipped with the DQMH singleton and cloneable module templates, it would help us avoid module synchronization + initialization issues like what I describe above.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
After consideration and discussion, we decided to decline this feature request.
The problem is very valid. We don't believe that the framework itself can solve it. We will surely put energy into documentation, blog posts and presentations to better describe the ins and outs of starting modules (and submodules). The HSE Dokuwiki has further information on this.
We really appreciate your input, declining the idea does not mean it didn't help us fine-tune the scope of DQMH and reconsider our strategy. Please keep those ideas coming 😉