![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
RazrFalcon |
![]()
Сообщение
#1
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Циклично создаются потоки:
Затем на cleaningFinished я вызываю:
Это нормальное решение или есть более правильное? И как можно завершить все потоки? ака кнопка "стоп". Сообщение отредактировал RazrFalcon - 5.11.2011, 16:39 |
|
|
RazrFalcon |
![]()
Сообщение
#2
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Пока что остановился на таком варианте:
и
Нормальное решение? Вроде пашет. |
|
|
PAFOS |
![]()
Сообщение
#3
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: ![]() ![]() ![]() |
не следует удалять сигнальщика в слоте. для этого есть deleteLater() |
|
|
RazrFalcon |
![]()
Сообщение
#4
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
PAFOS |
![]()
Сообщение
#5
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: ![]() ![]() ![]() |
ну а иначе рискуешь получить Segfauilt в неожиданном месте.
Создай отдельный список и храни там указатели на потоки в слоте workFinished()
th->deleteLater(); - после этого указатель на QThread уже можно терять. |
|
|
RazrFalcon |
![]()
Сообщение
#6
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Сегфолтов пока не наблюдал.
Плодить кучу переменых/списков нет желания. Люблю там где нужно получать переменные. |
|
|
RazrFalcon |
![]()
Сообщение
#7
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
нашел еще один способ:
Не знаю в чем разница между но результат то же.
|
|
|
Гость_Гость_* |
![]()
Сообщение
#8
|
Гости ![]() |
RazrFalcon, cскажите как узнаёте сколько ядер в системе?
Спасибо. |
|
|
RazrFalcon |
![]()
Сообщение
#9
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Влад |
![]()
Сообщение
#10
|
Участник ![]() ![]() Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: ![]() ![]() ![]() |
Хм, ну, как оно там точно организовано в ядре Линуксов, это я не знаю, но в Виндоус есть еще такая тонкость: мало насоздавать потоков (процессов) по числу ядер, надо еще не забыть привязать каждый поток/процесс к конкретному ядру. Там для этого предусмотрены специальные функции типа SetThreadAffinityMask() или что-то подобное (лезть в MSDN и уточнять сейчас лень). В противном случае, планировщик все равно имеет возможность по своему усмотрению перекидывать потоки с ядра на ядро, со всеми сопутствующими накладными расходами, - а оно тебе надо?
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 23:37 |