Well, of course we have! The easiest way is using QThreadPool with a custom QRunnable implementation. Your QRunnable's run() method would check the necessary values and refresh the UI. The main UI window should have a QTimer and on a predefined interval, it would create a new instance of your own QRunnable and make the thread pool execute it. Note that the thread pool has a static "global instance", so you don't have to create an instance of that, just access the global instance and make that do things for you.