Russian Qt Forum
Сентябрь 30, 2024, 22:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Обмен данными между потоками  (Прочитано 10454 раз)
akaMDA
Гость
« : Август 07, 2012, 10:32 »

Имеется н не сколько потоков,  обменивающихся данными через сигналы слоты. Работает все нормально,  но через какое то время соответствии перестают отвечать на сигналы.  В чем может быть проблема?
Записан
Bepec
Гость
« Ответ #1 : Август 07, 2012, 10:51 »

Возможно где то сигналы бегают к слотам, но через какое то они накрывают поляну с водочкой и пивасиком и перестают бегать. Их мобильность падает на 98%, а те, кто всё таки доходит до слотов, не могут передать ни одного вразумительного параметра трезвому и злому слоту.

PS телепаты в отпуске, маразматиков нету, телепортов тоже пока не придумали.
Записан
DmitryM
Гость
« Ответ #2 : Август 07, 2012, 11:59 »

Имеется н не сколько потоков,  обменивающихся данными через сигналы слоты. Работает все нормально,  но через какое то время соответствии перестают отвечать на сигналы.  В чем может быть проблема?
Запусти анализатор потоков и посмотри кто заблокирован.
Записан
Bepec
Гость
« Ответ #3 : Август 07, 2012, 12:00 »

А можно и мне ссылочку на анализатор потоков?
Записан
DmitryM
Гость
« Ответ #4 : Август 07, 2012, 12:42 »

А можно и мне ссылочку на анализатор потоков?
Хотя бы Intel Thread Profiler
Записан
Bepec
Гость
« Ответ #5 : Август 07, 2012, 13:12 »

Хм. А не проще тупо лог вести в файл? Улыбающийся Профайлер на то и профайлер, что он анализирует быстродействие.
Записан
DmitryM
Гость
« Ответ #6 : Август 07, 2012, 13:55 »

Хм. А не проще тупо лог вести в файл? Улыбающийся Профайлер на то и профайлер, что он анализирует быстродействие.
Ввод/вывод неявно синхронизирует потоки.
Заблуждаешься, профайлер нужен для сбора данных о работающей программе.
В данном случае, если потоки не заблокированы, то ошибка в алгоритме и обработке очереди сообщений.
« Последнее редактирование: Август 07, 2012, 14:01 от DmitryM » Записан
Bepec
Гость
« Ответ #7 : Август 07, 2012, 14:24 »

Кхм. Вопрос, а как ввод/вывод неявно синхронизирует потоки? Пожалуйста подробнее.
Записан
DmitryM
Гость
« Ответ #8 : Август 07, 2012, 15:06 »

Кхм. Вопрос, а как ввод/вывод неявно синхронизирует потоки? Пожалуйста подробнее.
system call
Записан
Bepec
Гость
« Ответ #9 : Август 07, 2012, 15:10 »

И? Поясните мне пожалуйста, как 2 рассинхронизированных потока смогут синхронизироваться при записи в 2 разных файла?

PS мб вы имели в виду, что имеется шанс в 20%, что потоки на некий момент времени могут синхронизироваться и шанс в 80% что они могут рассинхронизироваться при этом?

PPS или вы мб знаете больше чем я об асинхронных системных вызовах и о том, что они асинхронные?
« Последнее редактирование: Август 07, 2012, 15:14 от Bepec » Записан
DmitryM
Гость
« Ответ #10 : Август 07, 2012, 15:28 »

PPS или вы мб знаете больше чем я об асинхронных системных вызовах и о том, что они асинхронные?
Внутри std::cerr, std::cout, лежит системный вызов write.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Август 07, 2012, 15:33 »

Имеется н не сколько потоков,  обменивающихся данными через сигналы слоты. Работает все нормально,  но через какое то время соответствии перестают отвечать на сигналы.  В чем может быть проблема?
Ну свалить в консоль испускаемые сигналы и таким образом убедиться что они были испущены, но не дошли до цели. Просто тормознуться когда висит и посмотреть чем занята каждая нитка. Мало информации чтобы что-то рекомендовать конкретно
Записан
Bepec
Гость
« Ответ #12 : Август 07, 2012, 15:50 »

Эмм.. я как бы говорю о системных вызовах асинхронной записи в файл, а вы? Веселый

PS а по теме - достаточно дебагера, чтобы узнать где что завяло.
Записан
DmitryM
Гость
« Ответ #13 : Август 07, 2012, 16:06 »

Эмм.. я как бы говорю о системных вызовах асинхронной записи в файл, а вы? Веселый
Вызов системной функции не атомарная операция?
В случае, если два потока захотят выполнить одновременно системную функцию, один из потоков не заблокируется на время выполнения системного вызова?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Август 07, 2012, 16:32 »

Эмм.. я как бы говорю о системных вызовах асинхронной записи в файл, а вы? Веселый
Неясно откуда/причем здесь async  Улыбающийся  Какое-то выравнивание на I/O есть, даже если пишут в разнве файлы (устройство-то одно). Однако этот эффект может быть очень всяким (иногда и нулевым). Не думаю что правильно называть это "синхронизацией".  

Вызов системной функции не атомарная операция?
Нет, не атомарная (не lock-free)
В случае, если два потока захотят выполнить одновременно системную функцию, один из потоков не заблокируется на время выполнения системного вызова?
Может и нет (с печальными последствиями). Для таких вызовов в доке и хедерах указано "not thread-safe"
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 23.