有关d5开发asp对象的问题(200分)

S

sbxiang

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi 5的开发环境下,开发asp对象时,在多个客户端访问同一个对象的方法时,
会发生全局变量的共享冲突,导致错误,是不是因为在创建asp对象是,所用的线程模型不
对??我用的是apartment(默认的),请高手指教!
 
简单的说,就是在创建asp对象时,可选择线程模式,分别有single,apartment,
free,both,4种,这4种模式那种模式可以不需要保护asp对象中声明的全局变量?这4
种模式各有什么不同??
 
用没有用threadvar来设置全局变量啊.
我想全局变量的冲突未必会吧.很可能是变量没有被设为threadvar.
如果实在不行可以考虑使用临界或者互斥对象来实现threadsafe.
 
此问题我现在已找到个方法解决,但我认为这个方法并不是最好.
为了解决asp对象的全局变量的共享问题,可以在声明asp对象时,声明为free模式的,在
asp,在asp对象中不使用全局变量,如果实在需要利用到全局变量的话,可以采用在asp文件里
声明为session变量,在asp对象里采用session.get_value('session变量名')来调用session
变量,采用session.set_value('session变量名',value)来给session变量赋值,这样就可避开
在asp对象内部声明全局变量,可以解决多用户共享asp对象时,全局变量的共享冲突.
不知道还有没有更好的方法,希望来信探讨.信箱:chenxiangmail@263.net
 
关注。。。
 
不知道你的全局变量是要保存什么类型的数据?是对象吗?
-----------------------
这是个COM线程模型的问题。
你如果用single,apartment模型,全局变量由COM来自动保护的,编程相对简单一点。
如果用Free模型,就要自己保护全局变量,这里面有个线程安全问题。
如果用Both模型,除了保护全局变量,还要自己实现调度。因为数据有可能跨STA和MTA。

在ASP中使用的COM,建议你使用一种即用即放的方式,就是说需要调用时就创建,不用了就
释放。因为ASP在页面结束时会尝试释放所使用的COM对象。对于想采用MTS的缓冲机制的
COM,编程的难度就要大一些。
 
非得设成全局的吗?
单个线程使用,声明为Private属性也就可以;
多个线程用,申请一段共享内存。
 
接受答案了.
 
顶部