Я делаю так:
- конструкторы выполняют только тривиальную инициализацию, которая не требует вызовов сервисов оси;
- Есть объект-флажок TEventFlag startEvent;
- все процессы, кроме самого приоритетного, начинают работу с вызова функции startEvent.wait();
- наиболее приоритетный процесс в начале вызывает sleep(1), чтобы все остальные процессы встали на ожидание флага
- затем наиболее приоритетный процесс спокойно выполняет всю инициализацию. С вызовами сервисов оси, если надо.
- по окончании инициализации наиболее приоритетный процесс вызывает startEvent.signal();
В новых версиях оси можно создавать процессы спящими (задав третий параметр шаблона process равным pssSuspended), поэтому можно делать проще:
- все процессы, кроме самого приоритетного, создать спящими;
- выполнить инициализацию в наиболее приоритетном процессе;
- разбудить остальные процессы.
Версия с вызовом конструкторов после старта оси мне нравится, но она не подходит для написания библиотек. Библиотечные объекты не могут полагаться на то, что будет использован модифицированный стартап.
Если бы я знал, что такое электричество...