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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Объясните пожалуйста)  (Прочитано 13490 раз)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #15 : Ноябрь 20, 2013, 15:06 »

Так все таки, это ощущение или все работает в одном потоке?
Добавьте отладочный вывод Qt::HANDLE QThread::currentThreadId() [static]
Записан
alexeev
Гость
« Ответ #16 : Ноябрь 20, 2013, 15:08 »

Ну ощущение, сложилось из того, что при зажатии запись останавливается, размер файла не изменяется, и структуры данных пропускаются, это   точно.
А вот тут можо немного поподробнее с этим не знаком(( (Я об этом Qt::HANDLE QThread::currentThreadId() [static])
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #17 : Ноябрь 20, 2013, 15:13 »

Ну ощущение, сложилось из того, что при зажатии запись останавливается,
Это похоже на вендопроблему, она останавливает свою очередь событий при перетаскивании окна и с ней останавливаются всё.
Отдельная нитка должна решить проблему.

А вот тут можо немного поподробнее с этим не знаком(( (Я об этом Qt::HANDLE QThread::currentThreadId() [static])
Добавьте:
Код
C++ (Qt)
qDebug() << QThread::currentThreadId();

В главную нитку и в метод Write и увидите в каких потоках что выполняется. Если id будут одинаковые, то все выполняется в одном потоке, иначе в разных.
Записан
alexeev
Гость
« Ответ #18 : Ноябрь 20, 2013, 15:22 »

0x1760 Main Method
0x16c8 Write Method

Id у потоков разные
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #19 : Ноябрь 20, 2013, 15:22 »

Id у потоков разные
Значит нитки разные, что и требовалось. Улыбающийся
Записан
alexeev
Гость
« Ответ #20 : Ноябрь 20, 2013, 15:23 »

Тогда, почему моя задача не решилась, я полностью был уверен что поможет =( Непонимающий
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #21 : Ноябрь 20, 2013, 15:29 »

Тогда, почему моя задача не решилась, я полностью был уверен что поможет =( Непонимающий
Так а кто данные производит? Главная нитка? Тогда конечно не поможет.
Нужно весь опрос переносить в новую нитку, а не только запись.
Записан
alexeev
Гость
« Ответ #22 : Ноябрь 20, 2013, 15:32 »

Данные с ком порта принимаются в одном классе, в другой пересылаются и обрабатываются, в котором и просиходит создание это объекта Storage.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #23 : Ноябрь 20, 2013, 15:45 »

Данные с ком порта принимаются в одном классе, в другой пересылаются и обрабатываются, в котором и просиходит создание это объекта Storage.
Вот нужно, что бы прием был в отдельной нитке. Можно совместить их с обработкой, а можно вообще сделать одну нитку на прием, другую на обработку.
Записан
alexeev
Гость
« Ответ #24 : Ноябрь 20, 2013, 15:52 »

А вы Бы не могли объяснить почему не работает? Потому что данные просто послаться не могут в класс который находится в другом потоке, т.к поток главный при зажатии окна блокируется?
Тогда действительно приедтся перенсоить в отдельный поток и получение данных и их обработку(
Записан
Bepec
Гость
« Ответ #25 : Ноябрь 20, 2013, 16:40 »

Оконный менеджер Windows при захвате окна за заголовок блокирует поток этого окна. Т.е. поток приостанавливается. Почему и зачем - я вам не отвечу. Я сам задавал этот вопрос, но другого ответа не нашёл.

Как победить? В основном потоке только отрисовка, вся работа в других потоках.
Записан
alexeev
Гость
« Ответ #26 : Ноябрь 20, 2013, 16:56 »

А в linux так же?
Записан
Bepec
Гость
« Ответ #27 : Ноябрь 20, 2013, 17:32 »

Оконный менеджер Windows

Никто не жаловался, так что думаю нет, но... Всё зависит от оконного менеджера Улыбающийся
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #28 : Ноябрь 21, 2013, 07:40 »

А в linux так же?
Нет, т.к. WM на X11 является отдельным приложением.
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #29 : Ноябрь 21, 2013, 09:35 »

Как победить? В основном потоке только отрисовка, вся работа в других потоках.
А что так побеждается если рисует только главный поток?
Вот у меня сейсас открыт "Resource Monitor". Когда окно таскается, сначала появляется рамка и лишь при отпускании мыши окно передвигается. А во время драга информация в окне обновляется. Когда-то на OSX сам делал такое (несложно, через overlayWindow), не знаю, может сейчас уже в этом нет необходимости. Но что здесь должны быть стандартные решения - и к бабке не ходи, вот только мне они (пока) неизвестны  Улыбающийся
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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