How to start a few QProcess in parallel and block until all of them have exited?-Collection of common programming errors
If you connect all of the finished() signals to a single object living in the main thread, you don’t need to worry about protecting the counter. Each signal will get queued and processed in turn in the main thread. Just make sure you use a Qt::QueuedConnection when you connect.
Amartel is correct about checking to make sure they launch before letting them run.
Edit: As mentioned here (Is QProcess::finished emitted when process crashes in Qt?), you might consider connecting to the error() signal as well.