书中的一段话:在Free Threading之中,每一个应用程序服务器之中的COM对象的方法可能被数个线程执行,所以你的程序代码也必须保护方法之中使用的区域变量。
问:这里的方法之中的区域变量指什么?
如果就是指方法里的局域变量a,例如
procedure T1.MM(i: integer);
var
a:integer;
begin
end;
那为什么这个局部变量a也需要保护,正常多线程访问一个方法只是对全局变量要保护,方法里的局域变量是不需要保护的,看了李的书后以后对这个地方有点费解。
请大家指点一下,谢谢!
问:这里的方法之中的区域变量指什么?
如果就是指方法里的局域变量a,例如
procedure T1.MM(i: integer);
var
a:integer;
begin
end;
那为什么这个局部变量a也需要保护,正常多线程访问一个方法只是对全局变量要保护,方法里的局域变量是不需要保护的,看了李的书后以后对这个地方有点费解。
请大家指点一下,谢谢!
var
a:integer;
begin
end;这里的 a 不要保护 T1 = class(xxx)
private
a: Integer; // 这个在 free 下要保护,做一个临界就可以了
..
用多实例的COM+时,每个实例都会共享COM+中全局对象的私有成员,这时一般是用ThreadGate的方式来保护私有数据或队列,可用1楼大哥说的TCriticalSection来保护~