Я действительно ответил на вопрос сам ...
<% using (Ajax.BeginForm("Post", "Entries", new { id = ViewData.Model.MemberDetermination.DeterminationMemberID }, new AjaxOptions { UpdateTargetId = "dc_goal_placeholder" }, new { enctype = "multipart/form-data" }))
Вы можете использовать спецификацию XEmbed , которая позволяет вам встраивать одно окно X11 в другое, и они могут быть из разных процессов. Это то, что обычно делают другие внешние интерфейсы медиаплееров.
И GTK, и Qt поддерживают XEmbed.
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
Посмотрите, как реализованы mplayer и smplayer. mplayer декодирует и показывает видео, а smplayer - это (необязательный) графический интерфейс.