我在Linux上写的视频播放器,我想将其分成2个过程:在Linux上,进程是否可以呈现另一个进程的GUI?
A.解码过程 B. GUI
这样,我可以用不同的编程语言和时问题发生,更容易知道问题在哪里。
问题是,可以直接处理A渲染解码图片到B的表面上吗?我不想用一些IPC来发送这些解码数据,因为这可能是非常低效的。
我在Linux上写的视频播放器,我想将其分成2个过程:在Linux上,进程是否可以呈现另一个进程的GUI?
A.解码过程 B. GUI
这样,我可以用不同的编程语言和时问题发生,更容易知道问题在哪里。
问题是,可以直接处理A渲染解码图片到B的表面上吗?我不想用一些IPC来发送这些解码数据,因为这可能是非常低效的。
看看mplayer和smplayer是如何实现的。 mplayer解码并显示视频,smplayer是(可选)GUI。
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
非常感谢!这就是我想要的。 – ablmf 2009-10-25 09:34:53