На Linux процесс мог представить GUI другого процесса?

Я действительно ответил на вопрос сам ...

<% using (Ajax.BeginForm("Post", "Entries", new { id = ViewData.Model.MemberDetermination.DeterminationMemberID }, new AjaxOptions { UpdateTargetId = "dc_goal_placeholder" }, new { enctype = "multipart/form-data" }))
5
задан Barett 1 July 2015 в 19:54
поделиться

3 ответа

Вы можете использовать спецификацию XEmbed , которая позволяет вам встраивать одно окно X11 в другое, и они могут быть из разных процессов. Это то, что обычно делают другие внешние интерфейсы медиаплееров.

И GTK, и Qt поддерживают XEmbed.

8
ответ дан 18 December 2019 в 14:48
поделиться

IPC (особенно конвейер Unix) намного эффективнее, чем вы думаете, и, вероятно, это правильный механизм для использования.

Однако, поскольку вы спросили, как это сделать без IPC (и Я понимаю, что это означает, что без переключений контекста и копий), вы можете просто создать сегмент разделяемой памяти между двумя процессами:

fd = shm_open("/my_shmem", O_RDWR| O_CREAT, S_IWUSR);
if(fd == -1) abort(); 
ftruncate(fd, SHMEM_SIZE); 
p = mmap(NULL, SHMEM_SIZE, PROT_WRITE |  PROT_READ, MAP_SHARED, fd, 0); 
if(p == MAP_FAILED) abort()

Теперь p имеет адрес сегмента разделяемой памяти, совместно используемого двумя (или более) процессами.

Предупреждение! числовое значение p (виртуальный адрес памяти) может отличаться между процессами, поэтому, если вы хотите поместить связанный список, например, в общую память, вам придется использовать смещения.

Ура, gby

4
ответ дан 18 December 2019 в 14:48
поделиться

Посмотрите, как реализованы mplayer и smplayer. mplayer декодирует и показывает видео, а smplayer - это (необязательный) графический интерфейс.

1
ответ дан 18 December 2019 в 14:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: