H
honestman
Unregistered / Unconfirmed
GUEST, unregistred user!
有没有具体的例子啊???
我还是不会用啊!
VCL支持三种技术来达到这个目的:
(2) 使用critical区
如果对象没有提高内置的锁定功能,需要使用critical区,Critical区在同一个时间只也
许一个线程进入。为了使用Critical区,产生一个TCriticalSection全局的实例。
TcriticalSection有两个方法,Acquire(阻止其他线程执行该区域)和Release(取消阻止)
每个Critical区是与你想要保护的全局内存相关联。每个访问全局内存的线程必须首
先使用Acquire来保证没有其他线程使用它。完成以后,线程调用Release方法,让其他线
程也可以通过调用Acquire来使用这块全局内存。
警告:Critical区只有在所有的线程都使用它来访问全局内存,如果有线程直接调用
内存,而不通过Acquire,会造成同时访问的问题。例如:LockXY是一个全局的Critical区
变量。任何一个访问全局X, Y的变量的线程,在访问前,都必须使用Acquire
LockXY.Acquire;
{ lock out other threads }
try
Y := sin(X);
finally
LockXY.Release;
end;
我还是不会用啊!
VCL支持三种技术来达到这个目的:
(2) 使用critical区
如果对象没有提高内置的锁定功能,需要使用critical区,Critical区在同一个时间只也
许一个线程进入。为了使用Critical区,产生一个TCriticalSection全局的实例。
TcriticalSection有两个方法,Acquire(阻止其他线程执行该区域)和Release(取消阻止)
每个Critical区是与你想要保护的全局内存相关联。每个访问全局内存的线程必须首
先使用Acquire来保证没有其他线程使用它。完成以后,线程调用Release方法,让其他线
程也可以通过调用Acquire来使用这块全局内存。
警告:Critical区只有在所有的线程都使用它来访问全局内存,如果有线程直接调用
内存,而不通过Acquire,会造成同时访问的问题。例如:LockXY是一个全局的Critical区
变量。任何一个访问全局X, Y的变量的线程,在访问前,都必须使用Acquire
LockXY.Acquire;
{ lock out other threads }
try
Y := sin(X);
finally
LockXY.Release;
end;