Russian Qt Forum
Ноябрь 23, 2024, 08:41
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Многопоточное программирование, процессы
>
Обмен данными между потоками
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Обмен данными между потоками (Прочитано 10559 раз)
akaMDA
Гость
Обмен данными между потоками
«
:
Август 07, 2012, 10:32 »
Имеется н не сколько потоков, обменивающихся данными через сигналы слоты. Работает все нормально, но через какое то время соответствии перестают отвечать на сигналы. В чем может быть проблема?
Записан
Bepec
Гость
Re: Обмен данными между потоками
«
Ответ #1 :
Август 07, 2012, 10:51 »
Возможно где то сигналы бегают к слотам, но через какое то они накрывают поляну с водочкой и пивасиком и перестают бегать. Их мобильность падает на 98%, а те, кто всё таки доходит до слотов, не могут передать ни одного вразумительного параметра трезвому и злому слоту.
PS телепаты в отпуске, маразматиков нету, телепортов тоже пока не придумали.
Записан
DmitryM
Гость
Re: Обмен данными между потоками
«
Ответ #2 :
Август 07, 2012, 11:59 »
Цитата: akaMDA от Август 07, 2012, 10:32
Имеется н не сколько потоков, обменивающихся данными через сигналы слоты. Работает все нормально, но через какое то время соответствии перестают отвечать на сигналы. В чем может быть проблема?
Запусти анализатор потоков и посмотри кто заблокирован.
Записан
Bepec
Гость
Re: Обмен данными между потоками
«
Ответ #3 :
Август 07, 2012, 12:00 »
А можно и мне ссылочку на анализатор потоков?
Записан
DmitryM
Гость
Re: Обмен данными между потоками
«
Ответ #4 :
Август 07, 2012, 12:42 »
Цитата: Bepec от Август 07, 2012, 12:00
А можно и мне ссылочку на анализатор потоков?
Хотя бы
Intel Thread Profiler
Записан
Bepec
Гость
Re: Обмен данными между потоками
«
Ответ #5 :
Август 07, 2012, 13:12 »
Хм. А не проще тупо лог вести в файл?
Профайлер на то и профайлер, что он анализирует быстродействие.
Записан
DmitryM
Гость
Re: Обмен данными между потоками
«
Ответ #6 :
Август 07, 2012, 13:55 »
Цитата: Bepec от Август 07, 2012, 13:12
Хм. А не проще тупо лог вести в файл?
Профайлер на то и профайлер, что он анализирует быстродействие.
Ввод/вывод неявно синхронизирует потоки.
Заблуждаешься, профайлер нужен для сбора данных о работающей программе.
В данном случае, если потоки не заблокированы, то ошибка в алгоритме и обработке очереди сообщений.
«
Последнее редактирование: Август 07, 2012, 14:01 от DmitryM
»
Записан
Bepec
Гость
Re: Обмен данными между потоками
«
Ответ #7 :
Август 07, 2012, 14:24 »
Кхм. Вопрос, а как ввод/вывод неявно синхронизирует потоки? Пожалуйста подробнее.
Записан
DmitryM
Гость
Re: Обмен данными между потоками
«
Ответ #8 :
Август 07, 2012, 15:06 »
Цитата: Bepec от Август 07, 2012, 14:24
Кхм. Вопрос, а как ввод/вывод неявно синхронизирует потоки? Пожалуйста подробнее.
system call
Записан
Bepec
Гость
Re: Обмен данными между потоками
«
Ответ #9 :
Август 07, 2012, 15:10 »
И? Поясните мне пожалуйста, как 2 рассинхронизированных потока смогут синхронизироваться при записи в 2 разных файла?
PS мб вы имели в виду, что имеется шанс в 20%, что потоки на некий момент времени могут синхронизироваться и шанс в 80% что они могут рассинхронизироваться при этом?
PPS или вы мб знаете больше чем я об асинхронных системных вызовах и о том, что они асинхронные?
«
Последнее редактирование: Август 07, 2012, 15:14 от Bepec
»
Записан
DmitryM
Гость
Re: Обмен данными между потоками
«
Ответ #10 :
Август 07, 2012, 15:28 »
Цитата: Bepec от Август 07, 2012, 15:10
PPS или вы мб знаете больше чем я об асинхронных системных вызовах и о том, что они асинхронные?
Внутри std::cerr, std::cout, лежит системный вызов write.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Обмен данными между потоками
«
Ответ #11 :
Август 07, 2012, 15:33 »
Цитата: akaMDA от Август 07, 2012, 10:32
Имеется н не сколько потоков, обменивающихся данными через сигналы слоты. Работает все нормально, но через какое то время соответствии перестают отвечать на сигналы. В чем может быть проблема?
Ну свалить в консоль испускаемые сигналы и таким образом убедиться что они были испущены, но не дошли до цели. Просто тормознуться когда висит и посмотреть чем занята каждая нитка. Мало информации чтобы что-то рекомендовать конкретно
Записан
Bepec
Гость
Re: Обмен данными между потоками
«
Ответ #12 :
Август 07, 2012, 15:50 »
Эмм.. я как бы говорю о системных вызовах асинхронной записи в файл, а вы?
PS а по теме - достаточно дебагера, чтобы узнать где что завяло.
Записан
DmitryM
Гость
Re: Обмен данными между потоками
«
Ответ #13 :
Август 07, 2012, 16:06 »
Цитата: Bepec от Август 07, 2012, 15:50
Эмм.. я как бы говорю о системных вызовах асинхронной записи в файл, а вы?
Вызов системной функции не атомарная операция?
В случае, если два потока захотят выполнить одновременно системную функцию, один из потоков не заблокируется на время выполнения системного вызова?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Обмен данными между потоками
«
Ответ #14 :
Август 07, 2012, 16:32 »
Цитата: Bepec от Август 07, 2012, 15:50
Эмм.. я как бы говорю о системных вызовах асинхронной записи в файл, а вы?
Неясно откуда/причем здесь async
Какое-то выравнивание на I/O есть, даже если пишут в разнве файлы (устройство-то одно). Однако этот эффект может быть очень всяким (иногда и нулевым). Не думаю что правильно называть это "синхронизацией".
Цитата: DmitryM от Август 07, 2012, 16:06
Вызов системной функции не атомарная операция?
Нет, не атомарная (не lock-free)
Цитата: DmitryM от Август 07, 2012, 16:06
В случае, если два потока захотят выполнить одновременно системную функцию, один из потоков не заблокируется на время выполнения системного вызова?
Может и нет (с печальными последствиями). Для таких вызовов в доке и хедерах указано "not thread-safe"
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...