Russian Qt Forum
Ноябрь 24, 2024, 14:41
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Подкиньте идею по остановке главного потока
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Подкиньте идею по остановке главного потока (Прочитано 3216 раз)
ecspertiza
Супер
Offline
Сообщений: 1053
С уважением, мастер конфетного цеха!
Подкиньте идею по остановке главного потока
«
:
Апрель 25, 2013, 09:06 »
Есть задача записывать видео с экрана пользователя. Есть библиотека которая кодирует видео в нужный формат, но есть проблемы с самим получением картинки. Насколько я понимаю картинку с экрана я могу получить только через QPixmap::grabWindow(). А как мы знаем QPixmap работает только в гуи потоке, стало быть если я буду вызывать QPixmap::grabWindow() в гуи потоке, то приложение у меня просто зависнет. Была идея следующего характера сделать два режима работы приложения в первом отображаем интерфейс во втором просто записываем видео, общение между двумя приложениями сделать через сокеты. Но тогда возникает другая проблема, после посыла сигнала на остановку приложения которое пишет видео, программа ведет себя не однозначно под разными ОС.
В Windows сигнал приходит, while - который производит запись видео останавливается, но что самое интересное кусок кода который находится после while не выполняется, такое ощущение что прога просто останавливает выполнение, хотя должна произвести еще некоторые операции, например запись в файл и прочие. Естественно для остановки while я использую флаг m_stop, что собственно говоря и странно.
В Linux сигнал просто не доходит. При этом если в главном потоке не выполнять while который получает изображения, то все хорошо.
А в маке вообще все здорово, там и при работе с одним потоком гуи не виснет.
Стало быть, прошу помощи, как в данном случае можно кошерно остановить приложение если gui поток занет снятием картинки с экрана. А может кто то подскажет более верный способ получения изображения с экрана.
Записан
ecspertiza
Супер
Offline
Сообщений: 1053
С уважением, мастер конфетного цеха!
Re: Подкиньте идею по остановке главного потока
«
Ответ #1 :
Апрель 25, 2013, 11:26 »
собственно вопрос отпадает, косяк в приложении был.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Подкиньте идею по остановке главного потока
«
Ответ #2 :
Апрель 25, 2013, 11:33 »
Кажется, в Qt5 всё-таки можно использовать пиксмапы из не-гуи треда (в отличие от виджетов).
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Подкиньте идею по остановке главного потока
«
Ответ #3 :
Апрель 25, 2013, 11:43 »
Цитата: Авварон от Апрель 25, 2013, 11:33
Кажется, в Qt5 всё-таки можно использовать пиксмапы из не-гуи треда (в отличие от виджетов).
Что-то очень сомнительно. Особенно на X-ах. Не перепутал с QImage?
Записан
Qt 5.11/4.8.7 (X11/Win)
ecspertiza
Супер
Offline
Сообщений: 1053
С уважением, мастер конфетного цеха!
Re: Подкиньте идею по остановке главного потока
«
Ответ #4 :
Апрель 25, 2013, 11:57 »
Насчет 5ого Qt не скажу, но в 4.8.4 например, если дернуть QPixmap::grabWindow не из гуи треда под X`ами софт просто упадет.
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Подкиньте идею по остановке главного потока
«
Ответ #5 :
Апрель 25, 2013, 12:13 »
Цитата: ecspertiza от Апрель 25, 2013, 11:57
Насчет 5ого Qt не скажу, но в 4.8.4 например, если дернуть QPixmap::grabWindow не из гуи треда под X`ами софт просто упадет.
И правильно сделает, т.к. пиксмап хранится на стороне Xserver-a.
Все работы с пиксмапами и с окнами делаются синхронно через XLib и через X Protocol.
Так что версия Qt значения не имеет.
Записан
Qt 5.11/4.8.7 (X11/Win)
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...