B budianermayi Unregistered / Unconfirmed GUEST, unregistred user! 2002-11-01 #1 我知道所谓的控件是非线程安全是指的什么,不安全的控件在多线程中运行时会有什么 危险???是不是在多个线程同时操作一个控件时候才会出现危险??
T tseug Unregistered / Unconfirmed GUEST, unregistred user! 2002-11-04 #4 1 任何对Windows GDI的调用必须受到保护 2 任何映射到GDI的VCL的方法或属性都不是线程安全的. 一般的, 任何可视化的东西 都不是线程安全的. 但幕后的工作通常是安全的. 如果不能确定, 假定不安全. 3 读取长字符串和动态数组是安全的, 但是写不是. 4 分配和释放内存是安全的. 但是一定要用Delphi的begin Thread代替API的CreateThread 5 仅当构造函数和析构函数是安全的, 生成或释放对象才是安全的.
1 任何对Windows GDI的调用必须受到保护 2 任何映射到GDI的VCL的方法或属性都不是线程安全的. 一般的, 任何可视化的东西 都不是线程安全的. 但幕后的工作通常是安全的. 如果不能确定, 假定不安全. 3 读取长字符串和动态数组是安全的, 但是写不是. 4 分配和释放内存是安全的. 但是一定要用Delphi的begin Thread代替API的CreateThread 5 仅当构造函数和析构函数是安全的, 生成或释放对象才是安全的.
P popi Unregistered / Unconfirmed GUEST, unregistred user! 2002-11-10 #5 当然有危险,如一个共享队列,两个线程同时来取一个数据,结果肯定会错误,就好象两个人 同时拿到了一张机票,到底算谁的? 解决办法:1。先InitializeCriticalSection 初始化一个临界量 然后利用下面的两个函数来锁定代码执行。 SelectCriticalSection(临界量) 需锁定的代码,如取队列数据 leaveCriticalSection(临界量) 2。CreateMutex 3.还有delphi的多线程专门调用关于vcl组件的一个函数syncro……,呵呵,具体 什么我也忘了,自己查吧,很容易查到的。
当然有危险,如一个共享队列,两个线程同时来取一个数据,结果肯定会错误,就好象两个人 同时拿到了一张机票,到底算谁的? 解决办法:1。先InitializeCriticalSection 初始化一个临界量 然后利用下面的两个函数来锁定代码执行。 SelectCriticalSection(临界量) 需锁定的代码,如取队列数据 leaveCriticalSection(临界量) 2。CreateMutex 3.还有delphi的多线程专门调用关于vcl组件的一个函数syncro……,呵呵,具体 什么我也忘了,自己查吧,很容易查到的。
R rockythd Unregistered / Unconfirmed GUEST, unregistred user! 2002-11-10 #6 将与VCL及公共变量相关的过程,在Execute中用Synchronize 来调用。
S sanlanggugu Unregistered / Unconfirmed GUEST, unregistred user! 2002-11-20 #7 与控件或者主窗体通信的,在Execute中用Synchronize 方法来调用。
B budianermayi Unregistered / Unconfirmed GUEST, unregistred user! 2002-11-20 #9 如果不存在多个线程的共同作用,也就是说,同一时刻只能有一个线程操作界面控件,会 出现所谓的危险嘛?
D delp Unregistered / Unconfirmed GUEST, unregistred user! 2002-12-04 #11 在Execute中用Synchronize 方法来调用。这不是明摆着是单线程嘛,我试验了很多次 delhpi 的多线程问题多多,到处地雷,我现在这样用 在 Execute中调用外部可执行程序 ShellExec .... Wait ... 但是注意如果你使用BDE,那么最好别这样用,因为BDE是的彻底的垃圾,起3个程序保证系统资源不足 不管你是64M 还是 128M 还是 256 还是 512M 都一个德行
在Execute中用Synchronize 方法来调用。这不是明摆着是单线程嘛,我试验了很多次 delhpi 的多线程问题多多,到处地雷,我现在这样用 在 Execute中调用外部可执行程序 ShellExec .... Wait ... 但是注意如果你使用BDE,那么最好别这样用,因为BDE是的彻底的垃圾,起3个程序保证系统资源不足 不管你是64M 还是 128M 还是 256 还是 512M 都一个德行