This thread doesnt need to communicate with the GUI thread since all GUI objects of interest (QLabels) are passed as parameters to the function and updated within it
If you run the function in a new thread, it has to be called inside the run() function of the new QThread, you cannot call (and cannot pass arguments), to the function directly from GUI thread.
Moreover you cannot update GUI objects from QThread directly (I mean from the function which executing in QThread)

even if the function is called by the QTimer every 1 ms, the executions dont interfere with each other (I dont know why this happens).
If you processing takes more than 1 ms, the next QTimer event is not delivered. If Qt is unable to deliver the requested number of timer clicks, it will silently discard some