How to make Qt work when main thread is busy?

前端 未结 3 1666
梦如初夏
梦如初夏 2020-11-27 17:37

Main (function main is there) thread of my program is reserved for non-GUI tasks. It calls a number of lengthy calculation functions. All implemented GUI\'s have been doing

相关标签:
3条回答
  • 2020-11-27 18:05

    It's best to offload the long computations onto other threads so the main GUI thread remains responsive. The old-school uniprocessing way of doing things would be be to make sure your computations never run for too long without polling GUI event handler, but that doesn't scale to multi-cores.

    Fortunately Qt has excellent threading support. In the past you'd have to roll-you-own system for e.g farming out tasks to a thread-pool using QThread, QMutex, QWaitCondition etc, but recent Qt releases have made things easier with higher level abstractions like QThreadPool, QtConcurrent::run and QFuture.

    0 讨论(0)
  • 2020-11-27 18:11

    I don't know how things will go if you call QApplication::exec() from another thread, which then becomes your gui thread. Just an idea.

    (Let us know if it works, it'd be interesting...)

    0 讨论(0)
  • 2020-11-27 18:19

    No, you should be doing your calculations in a separate thread. As you already mentioned, there is a work-around available in QCoreApplication::processEvents(), but it sounds like you're unable to make that work for you.

    If you don't want to have to do all the work of setting up a QThread and moving all your code, you may find that the QtConcurrent::run function is useful - it allows you to run a function asynchronously.

    A few pointers: You should try and keep your main (GUI) thread as light as possible. Large amounts of IO or calculations should either be done asynchronously using QtConcurrent::run, or run inside a separate QThread. Depending on the complexity of your code, you may be able to get away with the QtConcurrent method.

    0 讨论(0)
提交回复
热议问题