多线程中DLL同步 ( 积分: 100 )

  • 主题发起人 主题发起人 whitelight
  • 开始时间 开始时间
W

whitelight

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个线程中调用了一个DLL,因为其他线程也使用该DLL,所以我使用了synchronize()
运行时提示
there is no overloaded version of 'synchronize()'that can be called with this argument.
请问这是什么原因,应该怎么作?
我是新手,请多指教谢谢。
 
synchronize()
在dll中不能用的 你换成临界取 或者写成投递 定义事件就可以了
 
今天刚学的 ,卖弄下!
使用临界值 控制并发写法
private
Lock : TRTLCriticalSection;
Create //事件
InitializeCriticalSection(Lock);
destory()
DeleteCriticalSection(mLock);
lock()
EnterCriticalSection(Lock);
Unlock()
try
LeaveCriticalSection(Lock);
except
end;

//使用方法
lock
try
//保证对资源的唯一访问
finally
Unlock;
end;
 
synchronize()是vcl和主进程同步用的 。你的dll中有没有访问公有资源,没有的话,直接调用,临界区都可以免掉
 
其他线程也要调用该Dll,但不能同时调用,所以我加了synchronize,这样用对吗?
 
synchronize 说明白点就是,当多个线程同时向vcl组建中写东西的时候,比如返回执行日志写到tmemo中,必须保证这个同步。
而你所谓的dll中 不能同时调用只要用临界值,就行了,方法就是在你的类里边加上我上边写的那些东西就好了。依我理解这样你的对象就成了线程安全的了。
 
TThread.synchronize需要依赖TApplication.Idle时处理,在Dll中仍然是可用的关键是怎么用.
there is no overloaded version of 'synchronize()'that can be called with this argument.
提示可知你直接synchronize();调用明显没有这样的用法
.......
1.TThread.Synchronize(AMethod: TThreadMethod);
2.class procedure TThread.Synchronize(AThread: TThread;
AMethod: TThreadMethod)
[:D]
 
synchronize 完全没有必要在dll中使用,synchronize是将信息放到主界面的队列中。
win32下,主程序调用dll会建立自己的副本。
 
synchronize 调用是多余的,可以去掉
 
there is no overloaded version of 'synchronize()'that can be called with this argument.
他写的方法是一个参数非空的方法~~
 
synchronize 调用的方法体的原型他都不清楚,估计~~
 
后退
顶部