100分求解,不够在加!进程间通信问题,高手请进!

crgxw 2009-07-14 10:28:42
我在一个进程(proc1)中对sdl进行初始等操,如下
//proc1.c
SDL_Event WndEvent;
SDL_Surface *_Screen ;
SDL_VideoInfo *_pInfo;
SDL_PixelFormat * _pVfmt;


void main(int argc,char* args[])
{
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0)
{
printf("Init SDL is faild \n");
return false;
}
_Screen = SDL_SetVideoMode(640,380,16,SDL_ANYFORMAT);
_pInfo = (SDL_VideoInfo *) SDL_GetVideoInfo();
_pVfmt = _Screen ->format;
while (SDL_WaitEvent(&WndEvent))
{
..............
}
}
请问,我如何在另一个进程中(proc2)对第一个进程(proc1)中的_Sreen进程操做(如想画一个矩形等操作)那?

//proc2.c
void main(int argc,char* args[])
{
SDL_UpdateRect(_Screen,p ->x,p ->y,p ->cx, p ->cy);//注意,这里的_Screen应是在proc1中定义的
}

我现在已经将_Screen共享了(用共享内存的方法),可是在proc2中对_Screen操作时就会出错(个人认为sdl是在proc1中初始化,proc2中没有初始化),请高手指点!
...全文
58 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
crgxw 2009-07-17
  • 打赏
  • 举报
回复
好了,我已经解决了,是可以共享的,共享不是_screen,而是间接共享buffer
crgxw 2009-07-17
  • 打赏
  • 举报
回复
好了,我已经解了,是可以共享的,共享不是_screen,而是间接共享buffer
Wolf0403 2009-07-16
  • 打赏
  • 举报
回复
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
为啥这年头不清醒的人就那么多呢。。。。。。。。。。。。。
ShowMan 2009-07-15
  • 打赏
  • 举报
回复
11楼说的是, 要用共享内存,分配的时候也要用特殊的机制才可以
cceczjxy 2009-07-15
  • 打赏
  • 举报
回复
根据你上边的,_Screen是个指针,它指向的数据空间应该是有SDL_SetVideoMode函数分配的,释放也是由相应的函数来指向;再着它是一个结构体指针,其结构成员也可能是指针,会分配空间。如果仅仅共享了_Screen指向的空间,那你另一个进程仍然不能共享该结构的所有数据。
crgxw 2009-07-15
  • 打赏
  • 举报
回复
我在proc2中,读取了共享内存,还是不可以,我应怎么处里才能行那,
ShowMan 2009-07-14
  • 打赏
  • 举报
回复
其实fusion采用共享内存的方式是可以这样做的,不过比较复杂。
要学习不少东西。
rzsheng 2009-07-14
  • 打赏
  • 举报
回复
openGL需要硬件支持的吧
一 铭 2009-07-14
  • 打赏
  • 举报
回复
共享后的代码贴出来看看
crgxw 2009-07-14
  • 打赏
  • 举报
回复
这样还有一个问题,如果我用到sdl中的opengl工能,就没法实现了
Wolf0403 2009-07-14
  • 打赏
  • 举报
回复
典型不能这么做。进程1中设计一个接口,譬如通过 FIFO/PIPE 之类接受进程2发的消息(格式自己定义),然后执行相应的操作。简单的说就是一个 C/S 模式的架构。
一 铭 2009-07-14
  • 打赏
  • 举报
回复
感觉还是用共享内存比较好
你这是不是win的,proc1做了共享内存,但proc2怎么知道它在哪里呢?

在l下,共享内存会有一个标识,改标识是在固定的路径下,让后面要读该共享内存的内容的进程知道该路径
这样,这些进程就可以知道那块内存地址在哪里了,而你这个程序中,proc2好像没有去找到那块内存区,而是
直接去访问那个变量,当然找不到了。

最好在看看,在你这个平台下共享内存怎么用的
ShowMan 2009-07-14
  • 打赏
  • 举报
回复
有很多种IPC通信机制都可以做到,socket也是其中的一种。
到底哪个好,楼主还需要研究。
ShowMan 2009-07-14
  • 打赏
  • 举报
回复
fusion是一个多进程间实现共享的东西,本身也是C语言实现的。
Wolf0403 2009-07-14
  • 打赏
  • 举报
回复
main() {

while (command = read_from_control_socket())
{
command->do();
}
}

void OpenGLCommand::do()
{
glBegin();
glXXX();
glYYY();
glEnd();
}

void FileOpCommand::do()
{
FILE *fp = fopen(...);
fclose(fp);
}
crgxw 2009-07-14
  • 打赏
  • 举报
回复
用c语言实现不了吗?在线等待

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧