Перечисление C ++ / Qt - следует ли использовать блокировку для разделения значения между потоками? - PullRequest
1 голос
/ 04 июля 2010

У меня есть рабочий поток CTh / Ct QThread, который сохраняет свое текущее состояние как ENUM (например, такие значения, как Working, Finished).Только рабочий поток устанавливает ENUM.

Мне нужно иметь возможность прочитать состояние рабочего потока из другого потока (потока с графическим интерфейсом), чтобы отобразить на экране, выполняется ли работа.

Безопасно ли читать / писать ENUM в одном потоке (работнике) и читать в других потоках?В противном случае, я должен использовать блокировку как QMutex в местах, где он читается / записывается?

Ответы [ 2 ]

1 голос
/ 06 июля 2010

Более специфичный для Qt способ сделать это состоит в том, чтобы рабочий поток посылал сигнал со своим состоянием при каждом изменении состояния.Затем GUI будет подключаться к сигналу и обновлять все, что ему нужно для состояния рабочего потока.Если вы сделаете это и передадите состояние по значению, вам не понадобится мьютекс-защита состояния (так как значение копируется при отправке сигнала, эта копия никогда не изменяется, и копия читается в потоке пользовательского интерфейса).Однако, если вам все еще нужно запрашивать у потока его состояние в разное время, вам все равно потребуется блокировка.

1 голос
/ 04 июля 2010

Как сказал Нейл: да, тебе нужно запереться. Для вашего случая использования лучше подходит QReadWriteLock, чем QMutex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...