这样会死锁,请解释原因。并使其不会死锁。(已经解决问题, 散分) (300分)

  • 主题发起人 主题发起人 wlmmlw
  • 开始时间 开始时间
不死了,你那还死吗?
哥们,你没看我上面写的一大堆吗?我白写了:(
 
你确实试过了? 不死?
不死那我可就麻烦了,我这边死得直直的.
 
你进入vcl源码跟踪一下,看看死在哪?
 
这样吧,给我信箱,我把程序发给你
应该是两个程序吧,一个Server,一个Client
 
Paladin_yf,他在耍你。
看看现在还有谁在理它?
我实在不忍心,所以才说两句,Paladin_yf,快停吧。
 
谢谢了,SS2000兄,要解决他的这个问题还非得你那方法
谁叫他那样写的,不知道他为什么要同步,同步的话,主线程不动了,如果更新数据时间长的话,用户更受不了了
 
在我这边是这样的,如果下面三条语句一起用就会死,而且是执行了CoUninitialize才会.
我都不知道怎么调试.
OleCheck(CoInitialize(nil));
try
OleCheck(CoGetInterfaceAndReleaseStream(IStream(FStream), IID_IAppServer,
Appserver));
FNewData := AppServer.AS_GetRecords (FCDS.ProviderName,
-1,RecsOut,MetaDataOption,'',Params,OwnerData);
finally
CoUninitialize;
 
SS2000:::别发火撒,来,喝口茶!!!
 
太长了没时间看,下来再给你看看。
 
谢谢,太好了.
 
有人来看看否?
[:D]
 
我覺的,如果用戶不停地按button1,那麼就會不停地建立線程,而這些線錢都是使用的同一個clientdataSet,從而造成競爭資源,然而某些線程在執行的過程中,本身的數據又被其它的資源幹擾,從而造成饑餓
 
怪我没把问题讲清楚,大侠们都在考虑使得上面的代码有用.
我有意思是不用考虑上面代码的可用性.
在我这边调试时,上面的其它代码不变,把线程写成包含以下语句就会死掉
OleCheck(CoInitialize(nil));
try
OleCheck(CoGetInterfaceAndReleaseStream(IStream(FStream), IID_IAppServer,
Appserver));
FNewData := AppServer.AS_GetRecords (FCDS.ProviderName,
-1,RecsOut,MetaDataOption,'',Params,OwnerData);
finally
CoUninitialize;

我试过了,单单就CoInitialize和CoUninitialize就不会,可是在它们中间再加上CoGetInterfaceAndReleaseStream就会不行了.
查了很多资料都没说COM库在线程中使用要注意些什么,实在头痛.
请大侠们帮帮忙,如果你们在调试过程中不会死锁(注意,不要改主线程里的东西), 那我就得查查我这边的Delphi是否有问题了.[:)]
 
其实可以仿效java虚拟机关于多线管理机制。
 
其实你在主线程中WaitForSingleObject,然后在第二个线程用Synchronize()方法也是肯定死的,不信你随便试试.
还有,你的DOCM配置好没?
 
To PowerVR::::可否细讲?
To Paladin_yf:::已经没有Synchronize了.
DCOM需求什么样的配置吗? (我忽略了,得去瞧瞧)
 
你应该是C/S架构吧,按如下配置DCOM
1. 运行dcomcnfg程序,进行DCOM配置。
2. 进入DCOM的总体默认属性页面,将“在这台计算机上启用分布式COM”打上勾,将默认身份级别改为“无”。
3. 进入DCOM的总体默认安全机制页面,确认默认访问权限和默认启动权限中的默认值无EveryOne,如果不去掉EveryOne,应用服务器不能正常启动。
4.在常规页面中,双击你的应用服务器,打开你的应用服务器DCOM属性设置。
5.将常规页面中的身份验证级别改为“无”。
6.位置页面中选上“在这台计算机上运行应用程序”。
7.将安全性页面设置中,均选择“使用自定义访问权限”,编辑每一个权限,将EveryOne加入用户列表中。
8.身份标识页面中,选择“交互式用户”。
9.NT的GUEST用户不能禁用。
 
To Paladin_yf:
谢谢谢谢!!! 辛苦了.
可这只是让COM可用.如果不用线程,一切是OK的.
我只是想啊,这个在线程中用有关接口的API,这API会不会也象Synchronize一样,要主线程执行一下它才通得过啊.但看了看资料(非常有限的),没有说这API在线程使用要注意些什么啊.
请大家继续指点迷津,在下万分的感激!!!!
 
帮帮忙撒。
 
兄弟姐妹们,拉俺一把吧。[:(]
 
后退
顶部