[Interest] QThreadPool functionality for QThreads

Thiago Macieira thiago.macieira at intel.com
Wed Jan 18 06:26:57 CET 2017

On quarta-feira, 18 de janeiro de 2017 17:21:46 PST Frank Rueter | OHUfx 
> Hi,
> I got another threading question for the pros out there:
> In  my current application I am using QThread objects and
> QObject.moveToThread() to enable my GUI to download multiple files while
> updating progress bars in the main event loop. This is the respective

As usual, the usual disclaimer: you do not need threads to do networking or 
file I/O. The combined overhead of the networking I/O and saving of the files is 
unlikely to overwhelm the event loop to the point that the progress bar can't 
update smoothly.

I'm not saying impossible, but it's unlikely.

> snippet of code:
>          self.worker = MyClass()
>          self.workerThread = QtCore.QThread()
>          self.worker.moveToThread(self.workerThread)
> The trouble is when the user wants to download multiple files at once.
> In my current implementation that all works fine and I see multiple
> progress bars do there thing.
> However, there are cases when I need to force the download threads to be
> synchronous. I had hoped that I can use QThreadPool with QThreads, but
> turns out I need QRunnables in this case, and those don't have the same
> signals as QThread.

Why do you need to force them to be synchronous? And synchronous with what? 
With each other? Or do you mean sync() in the file saving?

Finally, what does being synchronous have to do with signals?

> So my question is:
> Is there a good way to use QThreads in a queue which is controlled by
> the main thread, or should I re-write my code and subclass QRunnable to
> add the signals I need (i.e. the ones that QThread has by default)?

The whole point of QThread is that the code it runs is independent of anything 
else. Only the OS scheduler decides when it's time to run it or suspend it.

> In the latter case I guess I'd have to inherit from both QObject and
> QRunnable, is this ok?


But we still don't understand what you're trying to do. All I can tell you is 
that you don't need to do what you're trying to do, since you don't need 
threads in the first place.

Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center

More information about the Interest mailing list