hfcas 发表于 2010-8-7 12:12:55

老马版主请教一个关于进程通信问题

老马好,请教一个问题。

我想实现这么一个功能:
用一个主进程分发任务,而使用子进程来干事情(子进程的个数可能为多个)。。所以自然想到进程通信的问题了
用了内存共享的方法,但是存在这么一个问题,就是子进程往共享内存写入任务时,这个时候可能出现多个子进程都把这个任务给取走
所以我就想如果类似于asp中的application操作,操作前 lock一下,操作完毕 unlock 那就很好。可是弄了下内存的锁定与解锁,可惜没有成功
网上搜到你的大帖

“http://www.m5home.com/blog2/blogview.asp?logID=363&cateID=2 用的是广播消息+子类化取回消息,再封装为一个类,实现逻辑层面的事件触发式工作过程,自我感觉使用上方便.....”

可惜上述地址无法下载。老马多加指导。

ps: 今天发现老马原来有个网站。论坛。。。。马上注册了个。。。:P

马大哈 发表于 2010-8-7 13:56:10

包里的EXE运行两份,然后在Text2里输入字符,回车,就可以看到效果了.

代码在这里:

http://www.m5home.com/blog2/attachments/month_0706/32007620152127.rar

还有另一种方案,利用COM进行共享,也是事件机制,代码还简单得多

等下给你发上来,现在上班.....

hfcas 发表于 2010-8-7 14:03:10

好的
多谢老马

利用COM进行共享,是指利用actieve exe吗

老马周末还在上班啊 辛苦辛苦

hfcas 发表于 2010-8-7 19:04:38

对了 那个压缩包中有个 tlb 文件如何注册呢,程序无法运行
一般见 tlb 不需要注册的呀 。。

晚上要晚点再来啦

马大哈 发表于 2010-8-7 19:23:38

确实是ActiveX EXE,老魏那里拿到的.

你看看吧,这个比较方便.

马大哈 发表于 2010-8-7 19:25:01

对了 那个压缩包中有个 tlb 文件如何注册呢,程序无法运行
一般见 tlb 不需要注册的呀 。。

晚上要晚点 ...
hfcas 发表于 2010-8-7 19:04 http://www.m5home.com/bbs/images/common/back.gif


    要在工程里引用一下......不知道为什么,有点怪

下班了,闪人.......

hfcas 发表于 2010-8-8 10:41:27

要在工程里引用一下......不知道为什么,有点怪

下班了,闪人.......
马大哈 发表于 2010-8-7 19:25 http://www.m5home.com/bbs/images/common/back.gif


    我已经在工程里引用了 运行调试时 提示 未注册 ,无法运行呢

马大哈 发表于 2010-8-9 08:18:53

回复 7# hfcas


    注册TLB要用这个代码:

http://www.m5home.com/blog2/attachments/month_0706/y2007620163052.rar

不过我还是建议你使用ActiveX EXE吧,事件机制比较方便.

另外,上面的那个共享内存通讯的代码其实也可以不要那个TLB,只不过需要自己构造一个内存中的结构,你得自己改改了.

反正就是字节复制,只需要知道地址与长度即可.

我使用TLB是为了偷懒......没想到还有注册问题,汗死.

Tesla.Angela 发表于 2010-8-10 12:59:59

进程通信请参考陈辉的博客

hfcas 发表于 2010-8-10 14:21:27

但用actieve x 有这么个问题
当activexe中处理耗资源的东西时 会导致主程序失去响应。。。

对这个 老马有好的方法没有呢

马大哈 发表于 2010-8-10 20:02:37

利用定时器让调用过程先返回.........微软的招.........

hfcas 发表于 2010-8-14 11:20:56

哈哈。。。反正很多时候不好办就用定时器的。。。

马大哈 发表于 2011-1-17 18:16:07

回复 hfcas 的帖子

微软自己的例子里也这样搞的呢......

wanren2008 发表于 2011-3-29 13:19:20

我现在遇到要多次打开运行一个程序(.exe),但是这多个进程间要共享一个数据。

试了老马的,以及5楼的,怎么运行例程生成的.exe,都没有反应?

wanren2008 发表于 2011-3-29 13:26:34

我现在遇到要多次打开运行一个程序(.exe),但是这多个进程间要共享一个数据。

试了老马的,以及5楼的,怎么运行例程生成的.exe,都没有反应?

马大哈 发表于 2011-3-30 09:59:20

回复 wanren2008 的帖子

CSEC.exe运行一份,进程里能看见,它是ActiveX服务器.

工程1.EXE运行N份,它们是ActiveX客户端.

然后就可以正常测试了.

wanren2008 发表于 2011-3-30 10:45:21

呵呵,终于明白了,是这么回事。
----------------------------------------------------------
那还有个问题:
实际应用是如何用?
把这个CSEC单独做个exe,在自己的程序中用Shell运行这个exe?
还是说把这些代码包含进我的代码,每次都怎么执行一下?

我看了下进程,不知道在进程里边进程名是啥?

马大哈 发表于 2011-3-31 10:34:47

回复 wanren2008 的帖子

ActiveX EXE你可以把它当成一个DLL使用,只不过是进程外的.

首次在机器上运行时,需要注册一下,方法是:

         app.exe /RegServer   '注册

反注册时:

      app.exe /UnRegServer   '反注册

然后就可以像普通DLL那样创建对象再实例化啥的了.
页: [1]
查看完整版本: 老马版主请教一个关于进程通信问题