![]() |
|
|
![]()
|
|
| fux |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 21.3.2014 Репутация: нет Всего: нет |
Придумал смешной способ передачи сигнала в дочерний процесс.
В родительском процессе вызывается метод объекта QProcess proc.terminate(); В дочернем, методом closeEvent (QCloseEvent *event) перехватывается закрытие процесса и игнорируется, причина прерывания считывается из разделяемой памяти. Может кто посоветует более солидный метод? |
|||
|
||||
| reider |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 18.11.2013 Репутация: нет Всего: нет |
QLocalSocket и QLocalServer
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 1 Всего: 459 |
Есть целая глава в справке, которая говорит как осуществлять межпроцесснрное взаимодействие.
http://doc.qt.io/qt-5/ipc.html -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| fux |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 21.3.2014 Репутация: нет Всего: нет |
QLocalSocket и QLocalServer - работает только при одноуровневой схеме, при каскаде процессов, нужно писать монстрообразного диспетчера.
QSharedMemory - хорошее решение но читать его таймером, это закапывать ресурсы. Остается сигнал в QProcess заслать, но тут у меня ничего не получается, мозгов не хватает, или QIODevice, но что-то тоже не очень красиво. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 1 Всего: 459 |
Семафор вполне может подойти в качестве сигнала, чтоб не заводить таймер, а читать уже из SharedMemory
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| fux |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 21.3.2014 Репутация: нет Всего: нет |
У семафора только один сигнал - destroyed, это не годится.
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
на таймере экономишь, но нить (QThread) всё равно нужна. Она и может эмитить сигнал, если нужно.
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
И вроде как нужно два семафора:
Добавлено @ 15:50 Ещё можно общаться через Clipboard или DragAndDrop. Но это может помешать работе других приложений (не будут работать Ctrl-C Ctrl-V в редакторе, мышка будет бегать сама по себе) Это сообщение отредактировал(а) math64 - 23.10.2015, 07:45 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 1 Всего: 459 |
Да именно в этом и смысл, чтобы поток ждал семафора, как семафор просигналил, поток просыпается и шлет сигнал или совершает некоторое действие. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| fux |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 21.3.2014 Репутация: нет Всего: нет |
В данном случае используется не поток, а процесс, который живет в своем адресном пространстве. Поэтому, как я понимаю, все ссылки на объекты родителя для дочки не сушествуют, как впрочем и наоборот. Все обмены должны производиться только через системные вызовы. Ни семафоры, ни разделяемая память, как ни странно, никаких сигналов для своих клиентов не генерируют.
|
|||
|
||||
| Guinness |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
CreateProcess, особое внимание стоит обратить на bInheritHandles. Также было бы неплохо почитать про таблицу хэндлов и объекты ядра. Для *nix систем, я думаю, ситуация будет похожа.
ЗЫ если я правильно понял намёки math64 и Alexeis. |
|||
|
||||
| fux |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 21.3.2014 Репутация: нет Всего: нет |
Что такое math64 и Alexeis я не знаю, но задачка похоже зависит от платформы, или через задний проход как в начале.
|
|||
|
||||
| Guinness |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
||||
|
||||
| fux |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 21.3.2014 Репутация: нет Всего: нет |
А что такое toTerminate?
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
QSystemSemaphore как раз для работы с разными процессами.
Этот кусок
будет включен как в родителя, так и в дочку. hasData контролирует передачу данных от родителя к дочке, answer контролирует считывание данных дочерним процессом. |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |