Why modifying GUI from worker thread does not rise access violation

  • Hi,

    I tried to update a GUI from a worker thread and strangely no exception is caught and the GUI is modified normally. However, I have randomely some access violation from Qt5GUI.dll.

    I want to know if that is possible ( that modifying a GUI from background thread may work ) and please explain me how the access violation occurs is this case.

    Thank you in advance.

  • Qt Champions 2017

    Yes it is possible. Nothing stops from you doing this. Can you tell me the run time error you hit when access violation happens ? It must be failing with 'sendEvent(...) method when you access the UI from other thread.

  • Moderators

    Modifying the GUI from a worker thread is not an access violation. However, it often causes data corruption. Qt's GUI classes are not "synchronized":http://doc.qt.io/qt-5/threads-synchronizing.html so it is not safe to modify them from different threads.

    Your worker thread should do one of the following:

    Emit a signal, to run a slot in the GUI thread, OR

    Use QMetaObject::invokeMethod() to run a slot in the GUI thread

    [quote author="Dheerendra" date="1425395696"]Yes it is possible. Nothing stops from you doing this.[/quote]No it's not. See the "documentation":http://doc.qt.io/qt-5/threads-qobject.html -- "GUI classes, notably QWidget and all its subclasses, are not reentrant. They can only be used from the main thread."

Log in to reply

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.