对于Midas中间层的线程问题,急!!!(300分)(300分)

  • 主题发起人 主题发起人 mxchao
  • 开始时间 开始时间
M

mxchao

Unregistered / Unconfirmed
GUEST, unregistred user!
在设计系统时为了防止一个大的远程数据模块出现,并且能够按对象设计,中间层设计为
有一个远程数据模块(TRomateDataModule),但同时按照一定规则建立了多个数据模块
(TDataModule),每一个数据模块作为一个功能独立的对象。在远程数据模块中只有数据
提供者,所有的数据对象和数据连接都在数据模块中,数据提供者通过数据模块得到数据。
为了能够使每一客户端连接者有独立的数据对象和数据连接,在远程数据模块中建立了其他
数据模块的私有对象。在远程数据模块的事件 OnCreate 中创建所有的数据模块。
按照我的理解在每一个客户端连接时都会建立一个远程数据模块的线程,同时建立了数据对象
和数据连接,每个客户端都有一个独立的线程提供服务。他们时线程安全的。

但实际上在两个用户同时连接时就出项问题。第二个连接受到第一个连接的影响,而不是相互
独立的工作,第一个连接更改服务器设置,第二个连接将会受到第一个的影响,得不到所需数据
给人的感觉线程是不安全的。在远程数据模块中只实例化了一次他定义的数据模块。
(在一个用户连接是不会有问题,可以正常的工作)
1。希望大家能够讨论,这个问题怎么解决?
2。在远程数据模块中建立其他的对象时,线程的问题。
3。远程数据模块在创建一个新线程时都完成了那些工作。
4。怎样才能让每个客户得到一个独立的数据连接。
望大家出手相救!!
 
看看李维的书吧
 
你必须自己用代码写dcom线程来解决。
根据李维的观点,delphi5的apartment线程并未自动实现多线程,它是按照先进先出方式
进行服务的。
好像有一个进入dcom的函数,然后制定/转换接口,最后也有一个退出dcom的函数。以上
做在客户端?我正在思考。

 
客户的每个线程创建一个DComConnection
 
我的建議﹕全使用遠程數據模塊(Apartment)﹐ 將各個模塊分工﹐
在每個模塊中加入數據連接和SESSION﹐每個模塊都使用Pooling技朮。
 
问题可能出在你的私有数据模块上。你可以将私有数据模块去掉再试一试,应该是不会相互影响的。
 
使用私有数据模块的初衷是减少远程数据模块的复杂性。将所有的方法都放到远程
数据模块太复杂了。就不能一举两得吗?
 
用私有数据模块时,若使用了DatabaseName之类的东东,BDE将会出现问题。就好象你编写一个
程序用了两个TDatabase,并且两个DatabaseName都相同,此时若打开两个TDatabase,将会出
现什么结果呢???
或者试一下每个TDatabase指定一个TSession试一试,不过应该也是不行的。
 
to mxchao:
能不能把远程数据模块的声明与 OnCreate 事件处理过程的代码贴出来,大家研究一下原
因。
 
你用的是BDE还是ADO?
MTS还是MTS&MIDAS?
那个shssssha老兄
李维说的是DELPHI5以前的版本未实现多线程
DELPHI5已经实现了,你仔细看看。。。
 
当然自动了
 
那么,
在每个远程方法中,
先实例化了定义的私有数据模块。
然后私有数据模块处理远程方法从客户端传来的数据.
最后,释放私有数据模块
这样处理,是否正确,请大家讨论
 
to mxchao
开始不创建所有的数据模块,只创建远程数据模块(协调对象),
只在远程方法用到时才在远程方法中创建相应的数据模块,而且,用完后立刻释放数据模块.
这样,怎么样?
 
多人接受答案了。
 
后退
顶部