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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Подкиньте идею по остановке главного потока  (Прочитано 3220 раз)
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« : Апрель 25, 2013, 09:06 »

Есть задача записывать видео с экрана пользователя. Есть библиотека которая кодирует видео в нужный формат, но есть проблемы с самим получением картинки. Насколько я понимаю картинку с экрана я могу получить только через QPixmap::grabWindow(). А как мы знаем QPixmap работает только в гуи потоке, стало быть если я буду вызывать QPixmap::grabWindow() в гуи потоке, то приложение у меня просто зависнет. Была идея следующего характера сделать два режима работы приложения в первом отображаем интерфейс во втором просто записываем видео, общение между двумя приложениями сделать через сокеты. Но тогда возникает другая проблема, после посыла сигнала на остановку приложения которое пишет видео, программа ведет себя не однозначно под разными ОС.

В Windows сигнал приходит, while - который производит запись видео останавливается, но что самое интересное кусок кода который находится после while не выполняется, такое ощущение что прога просто останавливает выполнение, хотя должна произвести еще некоторые операции, например запись в файл и прочие. Естественно для остановки while я использую флаг m_stop, что собственно говоря и странно.

В Linux сигнал просто не доходит. При этом если в главном потоке не выполнять while который получает изображения, то все хорошо.

А в маке вообще все здорово, там и при работе с одним потоком гуи не виснет.

Стало быть, прошу помощи, как в данном случае можно кошерно остановить приложение если gui поток занет снятием картинки с экрана. А может кто то подскажет более верный способ получения изображения с экрана.
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #1 : Апрель 25, 2013, 11:26 »

собственно вопрос отпадает, косяк в приложении был.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #2 : Апрель 25, 2013, 11:33 »

Кажется, в Qt5 всё-таки можно использовать пиксмапы из не-гуи треда (в отличие от виджетов).
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Апрель 25, 2013, 11:43 »

Кажется, в Qt5 всё-таки можно использовать пиксмапы из не-гуи треда (в отличие от виджетов).
Что-то очень сомнительно. Особенно на X-ах. Не перепутал с QImage?
Записан

Qt 5.11/4.8.7 (X11/Win)
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #4 : Апрель 25, 2013, 11:57 »

Насчет 5ого Qt не скажу, но в 4.8.4 например, если дернуть QPixmap::grabWindow не из гуи треда под X`ами софт просто упадет.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Апрель 25, 2013, 12:13 »

Насчет 5ого Qt не скажу, но в 4.8.4 например, если дернуть QPixmap::grabWindow не из гуи треда под X`ами софт просто упадет.
И правильно сделает, т.к. пиксмап хранится на стороне Xserver-a.
Все работы с пиксмапами и с окнами делаются синхронно через XLib и через X Protocol.
Так что версия Qt значения не имеет.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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