Синхронизация при сигналах и слотах в разных потоках |
Здравствуйте, гость ( Вход | Регистрация )
Синхронизация при сигналах и слотах в разных потоках |
Алексей1153 |
22.1.2013, 12:59
Сообщение
#1
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Вопрос: когда сигнал и слот имеют аргументы по значению (то есть, не указатели и не ссылки), нужно ли выполнять межпоточную синхронизацию, если я из одного потока шлю сигнал в слот другого? Понимаю, что глупый вопрос, поэтому задам его по-другому: в каких случаях при использовании сигнала в одном потоке и слота в другом требуется синхронизация ? Ситуация простейшая - передаю, к примеру, QString по значению из потока в поток Сообщение отредактировал Алексей1153 - 23.1.2013, 8:23 |
|
|
Алексей1153 |
24.1.2013, 9:57
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
выходит, если указать Qt::QueuedConnection , то аргументы по значению можно передавать без синхронизации
а вот указатели на локальные данные при Qt::QueuedConnection точно нельзя по определению так, а это что за комиссия ) Цитата Qt::QueuedConnection 2 Слот вызывается когда элемент управления возвращает управление в цикл обработки событий в потоке получателя. Слот выполняется в потоке получателя. у меня поток не использует контролы и цикл обработки событий. Или это неважно ? Сообщение отредактировал Алексей1153 - 24.1.2013, 9:52 |
|
|
iReset |
24.1.2013, 10:40
Сообщение
#3
|
Участник Группа: Участник Сообщений: 178 Регистрация: 6.6.2012 Пользователь №: 3414 Спасибо сказали: 23 раз(а) Репутация: 2 |
выходит, если указать Qt::QueuedConnection , то аргументы по значению можно передавать без синхронизации Все можно передавать безопасно, только пользоваться с оглядкой .а вот указатели на локальные данные при Qt::QueuedConnection точно нельзя по определению так, а это что за комиссия ) Судя по оригиналуЦитата Qt::QueuedConnection 2 Слот вызывается когда элемент управления возвращает управление в цикл обработки событий в потоке получателя. Слот выполняется в потоке получателя. Цитата The slot is invoked when control returns to the event loop of the receiver's thread. The slot is executed in the receiver's thread. тут неправильный перевод. Должно бытьЦитата Слот вызывается, когда управление возвращается циклу обработки событий в потоке получателя. Слот выполняется в потоке получателя. у меня поток не использует контролы и цикл обработки событий. Или это неважно ? Ну контролы фиг с ними, а как ты без цикла обработки событий хочешь получить сигнал? Если поток на основе QThread, то он сам запускает свой цикл обработки событий (тут, второй абзац).
|
|
|
Текстовая версия | Сейчас: 25.11.2024, 16:33 |