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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: [Qt 4.4] Поток и зависание  (Прочитано 14888 раз)
SASA
Гость
« Ответ #15 : Декабрь 03, 2008, 18:16 »

все равно интерфейс виснет Обеспокоенный

А можешь выложиь демо проект.
Записан
Urvin
Гость
« Ответ #16 : Декабрь 04, 2008, 10:56 »

Это то, что есть на данный момент: http://narod.ru/disk/4161918000/rivet_src.rar.html
Подключение потока к главной форме: mainwindow.cpp строки 235-238
Функции обработки данных потока: mainwindow.cpp строки с 362

mThread_messageGot - обработка соответсвующего события, вывод сообщения в элемент управления списком снизу
mThread_resultGot - вывод строки в правое текстовое поле
mThread_finished - окончание работы потока
btnStart_Clicked - нажатие кнопки запуска потока
btnStop_Clicked - нажатие кнопки остановки потока

Это программа для интерпретации марковских алгоритмов. Весь механизм упрятан в класс потока
Как работает:
1. В текстовое поле 'program' вводим
a->b
2. В мелкое текстовое поле 'execution' вводим
aabb
3. Нажимаем кнопку старта - справа от мелкого поля ввода
4. В поле результатов под кнопками получим bbbb - все верно

Если в поле программы вместо "a->b" ввести
a->b
b->a
программа уйдет в бесконечный цикл (причем это правильно!)  и в поле результатов последовательно будут выводиться строки bbbb и aaaa
Записан
Rcus
Гость
« Ответ #17 : Декабрь 04, 2008, 12:47 »

Слишком много сигналов посылаете gui потоку => очередь событий не успевает очиститься => окно не обновляется (проверить можно вставив msleep(50) после emit resultGot(inputStr)).
Записан
Urvin
Гость
« Ответ #18 : Декабрь 04, 2008, 13:07 »

Кнопка теперь нажимается)
а что теперь сделать чтобы поток все же останавливался по нажатию кнопки "стоп"?  Строит глазки
Записан
Rcus
Гость
« Ответ #19 : Декабрь 04, 2008, 15:17 »

/*sigh, vdiff*/
Код
C++ (Qt)
connect(btnStop, SIGNAL(clicked()), this, SLOT(btnStop_Clicked()));
« Последнее редактирование: Декабрь 04, 2008, 17:18 от Rcus » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #20 : Декабрь 04, 2008, 16:19 »

а что теперь сделать чтобы поток все же останавливался по нажатию кнопки "стоп"?  Строит глазки

Вы наверное игнорируете мои посты? Я же предложил вариант. См выше
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Urvin
Гость
« Ответ #21 : Декабрь 04, 2008, 17:05 »

pastor, не игнорирую. он просто не останавливается(
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #22 : Декабрь 04, 2008, 17:10 »

pastor, не игнорирую. он просто не останавливается(

неверю Улыбающийся ибо сам такой код юзаю. Если нетрудно, выложи свой обновленный код (со sleep) я проверю.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Urvin
Гость
« Ответ #23 : Декабрь 04, 2008, 17:31 »

Все, исправился, работает  Веселый
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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