Название: QThread, progressBar... Отправлено: Zmey от Июнь 18, 2004, 13:51 Windows XP
Qt-Win-Commercial-3.2.1 Visual C++ 6 Пишу программу, которая копирует большой файл, для отображения процесса копирования использую прогресс бар (QProgressBar).Копирую так: Код:
MyCopyProgressRoutine, это: Код:
Когда копируется файл, замирает окно программы, невозможно его переместить и т.д. И если пытаться окошко передвинуть, оно через несколько секунд передвигается , но прогрессбар замирает, и оживает только тогда, когда файл скопируется, тогда прогрессбар становится в 100%. Тогда делаем копирование в отдельном потоке: Код:
Но это не помогает! И самая лажа, что я смотрю в TaskInfi2003 (прога, показывающая процессы), и она не показывает, что у моей проги появился новый поток. Можете что-нибудь подсказать? Название: QThread, progressBar... Отправлено: Rainbow от Июнь 18, 2004, 14:08 А как запускаеш поток?
Название: QThread, progressBar... Отправлено: Zmey от Июнь 18, 2004, 15:03 Цитата: "Rainbow" А как запускаеш поток? MyThread w; w.run(); w.wait(); Название: QThread, progressBar... Отправлено: Zmey от Июнь 18, 2004, 15:15 Ответил, а потом думаю, а причем тут w.run(); ?
Исправил на w.start(); Теперь видно, что поток запускается, загружает процессор, то есть копирование идет через него, но проблема не решилась: окно сначала ни на что не реагирует, прогрессбар бежит, а потом окно оживает но замораживается прогрессбар, то есть так как было. Название: QThread, progressBar... Отправлено: EugeneVC от Июнь 18, 2004, 16:54 так в чем у тебя проблемма то
окно морозится? Название: QThread, progressBar... Отправлено: Anonymous от Июнь 21, 2004, 08:32 Цитата: "EugeneVC" так в чем у тебя проблемма то окно морозится? Когда начинается копирование - окно морозится, его нельзя переместить, не нажимаются кнопки, но прогрессбар бежит. Через секунд десять окошко можно переместить, но кнопки все еще заморожены. И если окошко не трогать, то он прогресс благополучно добегает до 100%, но если окошко тронуть, морозится и прогресс :) и не оживает пока файл не докопируется. Вот такой отстой. Название: QThread, progressBar... Отправлено: EugeneVC от Июнь 21, 2004, 14:14 можно попробовать вызывать
qApp->processEvents (); это позволит избежать заморозки окон Название: QThread, progressBar... Отправлено: Zmey от Июнь 22, 2004, 10:45 Большое спасибо.
Кстати, хорошая книга http://hardclub.donntu.edu.ua/projects/qt/books/QT3%20GUI%20Programming.zip. В ней есть такая глава "Staying Responsive During Intensive Processing", описывается как сделать, чтобы не морозилось окно. Название: QThread, progressBar... Отправлено: Zmey от Октябрь 25, 2004, 11:55 Трабл с потоками решился так: MyThread w; запускаем поток не w.start(); , а w.start(QThread::HighestPriority);
|