Nominate our 2022 Qt Champions!

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": 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": -- "GUI classes, notably QWidget and all its subclasses, are not reentrant. They can only be used from the main thread."

Log in to reply