导航
  • 主页
  • Windows SDK/API
  • 基础类
  • ActiveX
  • 数据库及相关技术
  • 网络及通讯开发
  • VCL组件使用和开发
  • 问答

关于BCB5做MIDAS应用服务器的一个重要疑问(或者是BUG)。

halfdream 2001-11-10 03:02:02
相信有不少朋友在用BCB5写应用服务器吧。。(或者仅仅是一般的自动化对象)。
不知道注意过这个问题没有:


用BCB5 (使用过企业版PACK和ADO PACK)建立一个应用服务器。线程模型选Apartment.然后使用类型库编辑器给它创建一个接口方法。。比如叫WaitSleep
{
Sleep(10000); //注意大小写。sleep()是另一个函数
}
就这样,编译运行。
然后执行多个客户端程序。不管是BCB,DELPHHI,VB写的也好,
去调用这个SLEEP方法。可以明显发现,,一个客户端的调用会阻塞
另一个客户端调用这个方法。当并发的客户端多了之后,,几乎是灾难性的。
现在,再用DELPHI6 或者DELPHI5重建一个应用服务器,同样建这样一个接口方法。
然后再试试。。各客户端互不受干扰。。

本打算用BCB5建应用服务器的,但这个问题没有解决,只得改回我以前建应用服务器
的DELPHI。
BCB和DELPHI实现应用服务器机制是不相同的。
BCB5使用的是ATL, 代码看上去让人头大,
有哪位朋友解决过这个问题吗?



...全文
164 点赞 收藏 23
写回复
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
halfdream 2002-03-21
TO:szwxj(甲骨文) , 楼上sunspot_lee()举出的那篇文章
你看看吧。
回复
szwxj 2002-03-20
这个问题是怎么解决的?

我现在也是急需知道,搜索了半天,才找到这个贴子,但其他贴子就没有找到,希望高手能继续回答!
回复
ylm163net 2001-11-15
这几天太忙,过几天给你发
回复
猛禽 2001-11-14
太可怕,你又不开QQ,快开
回复
HEROIN 2001-11-14
BCB的帮助中已经说得很明白,为什么大家不看看呢?
回复
comanche 2001-11-14
这段初始化的代码的 Source 我看了几百次了,找不到问题的所在,因为它跟 Delphi 的看上去都一样....
回复
comanche 2001-11-14
文秀兄觉得一定能做得到吗?
我在 borland news group 上问到过这样的问题, 没有回应。
你能 mail 一个解决的代码给我看看吗?
comanche@yeah.net

回复
halfdream 2001-11-13
ylm163net(文秀),仔细想想,你这样的方法倒是顺理成章的,系统生成的代码中没有创建线程,
自已创建就是了。呵呵。差不多可以给分了。
先等等,希望更多的人看到这个问题。
回复
halfdream 2001-11-13
to:HEROIN(HEROIN),
apartment 线程毫无疑问没有问题的,关于什么基于排队一说,
关于Apartment的进程外COM在DELPHI中客户端多线程情况下阻塞情况的出现,我们以前已经讨论过的,那只是因为服务端没有产生多线程。



回复
HEROIN 2001-11-12
Apartment并不是真正多线程模式,它是基于排队的,第一个访问未结束前,后续访问不会被执行
若想并行执行,用Free模式

参见BCB的Help中的线程模式
回复
sunspot_lee 2001-11-12
可以解决的。
回复
comanche 2001-11-12
这个问题早就讨论过了,是不能解决的问题之一,我一直都用 Delphi写COM程序,除非你用 CORBA 服务器,BCB做得很好。
回复
ylm163net 2001-11-12
另外:
全局变量究竟是指向了哪个数据模块呢?
全局变量没有指向任何模块,因为其没有实例化,
bcb中是在COM中,(TCOMIXXXXX)中,用一个指针
指向远程模块,和全局变量没有关系
回复
ylm163net 2001-11-12
: halfdream(哈欠) :
是的,的确需要手工添加代码,是在
WinMain程序入口函数处添加,在该函数的第一行初始化
回复
juqiang 2001-11-12
study!
回复
ylm163net 2001-11-12
comanche(太可怕) :
>>这个问题早就讨论过了,是不能解决的问题之一

真奇怪,我的com服务器一直都用bcb谢的,怎么就不阻塞呢?
自己没有解解决,就以为bcb无法解决
回复
781014 2001-11-11
1
回复
ylm163net 2001-11-11
的确是线程问题,不过,这个CoInitialzieEx(...)不是在客户端,
而是写在服务器端,以前做进程外服务器,我都是这样做的,
绝不会发生阻塞,不过现在我做com+,一前的代码找不到了,
一可以在网上搜索一下,CoInitialzieEx时代参数的,
不同的参数对应不同的县城模式
回复
sunspot_lee 2001-11-11
可以看看http://www.csdn.net/develop/article/11/11230.shtm,应该可以解决你的问题。
回复
halfdream 2001-11-11
谢谢ylm163net(文秀)
代码是不需要的.你的意思是在BCB自动产生的应用服务器框架代码中需要手工补充CoInitializeEx,
是在远程数据模块的创建事件中创建线程,并用CoInitializeEx初始化COM线程模型?
如果一定要这样做的话,我想应该没有什么问题。。
呵呵。。我真希望BCB在这方面能做得现成些。


回复
发动态
发帖子
C++ Builder
创建于2007-08-02

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
社区公告
暂无公告