找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 16795|回复: 17

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

 火... [复制链接]

2

主题

11

回帖

0

精华

初来乍到

积分
23
发表于 2010-8-7 12:12:55 | 显示全部楼层 |阅读模式
老马好,请教一个问题。

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

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

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

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

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-8-7 13:56:10 | 显示全部楼层
包里的EXE运行两份,然后在Text2里输入字符,回车,就可以看到效果了.

代码在这里:

http://www.m5home.com/blog2/atta ... /32007620152127.rar

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

等下给你发上来,现在上班.....
我就是嗷嗷叫的老马了......

2

主题

11

回帖

0

精华

初来乍到

积分
23
 楼主| 发表于 2010-8-7 14:03:10 | 显示全部楼层
好的
多谢老马

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

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

2

主题

11

回帖

0

精华

初来乍到

积分
23
 楼主| 发表于 2010-8-7 19:04:38 | 显示全部楼层
对了 那个压缩包中有个 tlb 文件如何注册呢,程序无法运行
一般见 tlb 不需要注册的呀 。。

晚上要晚点再来啦

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-8-7 19:23:38 | 显示全部楼层
确实是ActiveX EXE,老魏那里拿到的.

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

老V_CSEC.rar (11.32 KB, 下载次数: 14461)
我就是嗷嗷叫的老马了......

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-8-7 19:25:01 | 显示全部楼层
对了 那个压缩包中有个 tlb 文件如何注册呢,程序无法运行
一般见 tlb 不需要注册的呀 。。

晚上要晚点 ...
hfcas 发表于 2010-8-7 19:04



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

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

2

主题

11

回帖

0

精华

初来乍到

积分
23
 楼主| 发表于 2010-8-8 10:41:27 | 显示全部楼层
要在工程里引用一下......不知道为什么,有点怪

下班了,闪人.......
马大哈 发表于 2010-8-7 19:25



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

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-8-9 08:18:53 | 显示全部楼层
回复 7# hfcas


    注册TLB要用这个代码:

http://www.m5home.com/blog2/atta ... /y2007620163052.rar

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

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

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

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

评分

参与人数 1水晶币 +3 +8 收起 理由
hfcas + 3 + 8 好老马啊。。 老马好啊。。。

查看全部评分

858

主题

2638

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36138
发表于 2010-8-10 12:59:59 | 显示全部楼层
进程通信请参考陈辉的博客

2

主题

11

回帖

0

精华

初来乍到

积分
23
 楼主| 发表于 2010-8-10 14:21:27 | 显示全部楼层
但用actieve x 有这么个问题
当activexe中处理耗资源的东西时 会导致主程序失去响应。。。

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

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-8-10 20:02:37 | 显示全部楼层
利用定时器让调用过程先返回.........微软的招.........
我就是嗷嗷叫的老马了......

2

主题

11

回帖

0

精华

初来乍到

积分
23
 楼主| 发表于 2010-8-14 11:20:56 | 显示全部楼层
哈哈。。。反正很多时候不好办就用定时器的。。。

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-1-17 18:16:07 | 显示全部楼层
回复 hfcas 的帖子

微软自己的例子里也这样搞的呢......
我就是嗷嗷叫的老马了......

7

主题

38

回帖

0

精华

铜牌会员

积分
247
发表于 2011-3-29 13:19:20 | 显示全部楼层
我现在遇到要多次打开运行一个程序(.exe),但是这多个进程间要共享一个数据。

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

7

主题

38

回帖

0

精华

铜牌会员

积分
247
发表于 2011-3-29 13:26:34 | 显示全部楼层
我现在遇到要多次打开运行一个程序(.exe),但是这多个进程间要共享一个数据。

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

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-3-30 09:59:20 | 显示全部楼层
回复 wanren2008 的帖子

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

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

然后就可以正常测试了.
我就是嗷嗷叫的老马了......

7

主题

38

回帖

0

精华

铜牌会员

积分
247
发表于 2011-3-30 10:45:21 | 显示全部楼层
呵呵,终于明白了,是这么回事。
----------------------------------------------------------
那还有个问题:
实际应用是如何用?
把这个CSEC单独做个exe,在自己的程序中用Shell运行这个exe?
还是说把这些代码包含进我的代码,每次都怎么执行一下?

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

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-3-31 10:34:47 | 显示全部楼层
回复 wanren2008 的帖子

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

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

           app.exe /RegServer     '注册

反注册时:

      app.exe /UnRegServer     '反注册

然后就可以像普通DLL那样创建对象再实例化啥的了.
我就是嗷嗷叫的老马了......

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表