Как понять что программа работает в двух потоках? |
Здравствуйте, гость ( Вход | Регистрация )
Как понять что программа работает в двух потоках? |
RazrFalcon |
14.10.2010, 20:48
Сообщение
#31
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
RazrFalcon, ты бы документацию читал, там все подробно описано http://www.doc.crossplatform.ru/qt/4.6.x/qthread.html и тд. Читаю, если б понимал - не спрашивал бы Здесь функция run2 всегда будет вызываться в основном потоке. в том то и дело, что я не пойму как создать отличную от основной функцию/поток. Мне надо создать 2-а разных потока! Или один, но с возможностью передачи параметров. У меня после изменения функции run все рушится постоянно. Все. Разобрался! Сейчас дошлифую и выложу рабочий вариант, на всякий случай. Правда не пойму почему прога не завершается сама, все делает нужное, а потом просто висит. Сообщение отредактировал RazrFalcon - 14.10.2010, 20:55 |
|
|
RazrFalcon |
18.10.2010, 19:28
Сообщение
#32
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Опять в один поток идет все!
Раскрывающийся текст
Сообщение отредактировал RazrFalcon - 18.10.2010, 19:32 |
|
|
Алексей1153 |
18.10.2010, 20:07
Сообщение
#33
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Опять в один поток идет все! а в чём это выражается ? А это шо за хрень неведомая
так всё правильно: потоки ты не запустил (//start) , а метод run вызываешь из одного потока (главного). Вот и один поток Сообщение отредактировал Алексей1153 - 18.10.2010, 20:07 |
|
|
RazrFalcon |
18.10.2010, 20:14
Сообщение
#34
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
В том то и проблема.
Если использовать start - то 2-а потока еще добавляю, но я не могу функции run() послать переменную. А если через run - то все в один поток, но зато я могу передать свои значения. Как это правильно сделать? PS выражается в том что загружено только одно ядро. Еще одну ошибку нашел. Запустил дебаг, а оно пошло создавать потоки, когда было >100 я остановил прогу. То есть их нужно закрывать еще =( Я тут повешусь с этими потоками. Сообщение отредактировал RazrFalcon - 18.10.2010, 20:18 |
|
|
Алексей1153 |
18.10.2010, 20:23
Сообщение
#35
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
RazrFalcon, пипец...
конечно же, если в цикле вызывать start, будет много потоков. И для них 100 ядер не надо, чтобы это определить ))) Параметры передай через члены классов MyThread и MyThread2 |
|
|
RazrFalcon |
18.10.2010, 20:28
Сообщение
#36
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Параметры передай через члены классов MyThread и MyThread2 ? Не понял. Как передать то? То есть мне надо сами циклы в run() уже делать? Создаю два потока, а они оба с while. Я правильно понял. PS извиняюсь за тупость, но я вторую неделю мучаю эти потоки, и пока просветления никакого. |
|
|
Алексей1153 |
18.10.2010, 20:39
Сообщение
#37
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
RazrFalcon |
18.10.2010, 20:47
Сообщение
#38
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Логика работы потоков мне ясна, я не понимаю тока реализацию саму. Мне нужно: взять изображение с камеры обработать отобразить обработанное. В потоках только обработка. А захват и отображение main. Как передать захвачено изображение потоку? Это вообще логично/возможно для двух ядер? Сообщение отредактировал RazrFalcon - 18.10.2010, 20:48 |
|
|
Алексей1153 |
18.10.2010, 21:01
Сообщение
#39
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Логика работы потоков мне ясна, я не понимаю тока реализацию саму неа, не ясна тебе работа потоков. Поток - это процедура (голая такая процедура, и НИЧЕГО БОЛЬШЕ ВООБЩЕ) - статическая или глобальная. Только запускается эта процедура системой, а не вызывается как обычно из кода одного из потоков (в последнем случае нить, проходящая через процедуру не являет собой нового потока - смотри первый рисунок) Под WINAPI объявление потока выглядит так:
При чём тут ядра? Где тут ядра? Забудь про ядра! я бы так сделал: 1) первый поток - захват, помещение в очередь обработки 2) второй поток - извлечение из очереди обработки, обработка, отправка в БД/ОЗУ/файл 3) основной поток - отображение из БД/ОЗУ/файла чтение/запись надо синхронизировать - тут наблюдается две таких точки (запись в очередь/извлечение из очереди , запись в хранилище/извлечение из хранилища) |
|
|
RazrFalcon |
18.10.2010, 22:11
Сообщение
#40
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Мне нужна многопоточность, только для ускорения работы, а такой алгоритм, как вы написали, не очень то похож на высокопроизводительный.
Вот если бы оно в два пото обрабатывало, это мне понятно, а просто раскидать по потокам |
|
|
Текстовая версия | Сейчас: 15.1.2025, 11:13 |