荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: playboy (冷冷的太阳), 信区: Program
标  题: Win32 行程通讯的观念与技术(1)
发信站: BBS 荔园晨风站 (Mon Mar 20 15:45:54 2000), 转信


  窗子提供的永远只是局部的风景。身为窗子的制造者以及使用者的我们不可能
不明白这个道理;对於窗子的使用者日益挑剔的品味,窗子的制造者所能提供的
不仅止於窗子的大小,往往是窗子的数量。的确,探出窗去看得将更多一些,外
头天空地宽朗朗白日,别的窗子也许正有我们想要的风景。
    这篇文章谈的是 Interprocess Communication (IPC),我将与你分享跨行程
通讯的各项技术与资料交换的方法。

为什麽需要 IPC?

为什麽需要 Inter-process Communication?
    显而易见的,没有一个视窗应用程式可以包办全部的工作。为了避免资料重
覆输入的时间浪费与人为错误,各应用程式间的资料会有互相交换的需求。首先
的压力将来自於使用者,甚至於很可能是你自己。先不说别的,在写这篇文章时
,我就曾剪贴原来以 Delphi 撰写的程式到文书编辑软体,同时,也利用抓图软
体帮我拍下执行画面,最後,这些文章与范例程式得用压缩程式压起来,然後
E-mail寄给杂志编辑。
    使用 IPC 在某些情况下是不得不然的决定,有时候程式必须跨过机器边界让
另一部机器内的程式明白该怎麽合作来共同完成工作,这同时也暗示我们可能面
临不同的作业系统的问题。
    此外,IPC有助於系统的安全与稳定。由於Win32各个行程彼此独立的特性,
一个行程死掉了,其他的行程还可以继续跑下去,对於某些稳定性要求很高的系
统而言, 值得以额外的负担(Overhead)交换系统的强固性(robustness)。嗯! 我
的意思是说,因为系统对稳定性的需求要求较高,值得拆开来做甚至额外的备援
系统,既然工作拆成两个以上,此时必然需要IPC。

以谡? 使用的方法是:第一
次先用广播的,每一个视窗程式都会收到通知,讯息的短叁数(wParam)中写明发
讯视窗的 Handle 值,如果是同志,它自然明白这个讯息代表了什麽,并且也使
用SendMessage() 回送约定的讯息表示收到。同样的,讯息的短叁数注明自己的
Handle。於是,茫茫人海的小俩口终於得知对方的下落,以後就不再需要公开寻
人可以透过Handle值直接与对方联络了。
    除了讯息编号,讯息的wParam,lParam长短叁数也可以用来进一步约定通讯
的细节。事情进展得似乎十分顺利,现在我们知道合作对象,也确信它明白我们
的讯息代表什麽。虽然简单,但是这种暗通款曲的方式是系统默许的。不过,我
们还需要再多解决一个问题。
    由於SendMessage 只有 wParam,lParam 两个 DWORD 型别的长短叁数,携带
的资料量十分有限。很显然的,我们需要能够一次传送更多资料的方法。Windows
 也的确提供了许多交换资料的机制,我在这篇文章中将会一一说明,其中最简便
的方法是使用 WM_COPYDATA 讯息,作法如下
将资料内容指定到COPYDATASTRUCT这个资料结构中。
必须使用SendMessage()送出 WM_COPYDATA讯息,讯息的短叁数是发讯端视窗的
Handle值,长叁数的内容则是指向COPYDATASTRUCT的指标。
受讯端行ǘ恋模?
如果後来程式处理需要这些资料,应该要先将之拷贝出来。

    多亏有了这项特殊的性质,使得WM_COPYDATA与讯息沟通模型成为 Win32 平
台上少数同时支援 16-bit与32-bit应用程式的IPC机制。你可以在WM_COPYDATA目
录找到范例程式TwinApp的完整原始程式。

--
※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.90]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店