FHa*_*nes 8 delphi thread-safety dwscript
我想知道DWScript是否能够在脚本中使用线程,因为一些引擎不会同步访问它的内部数据结构.
Arnaud 给出了关键点:
运行一个脚本的多次执行类似于在 Delphi 中拥有多个线程,尽管每个新执行不仅有自己的堆栈(如 Delphi 线程),而且还有自己的变量空间(在 Delphi 中有点像如果你有“线程var”无处不在)。并且 DWScript 执行不必在它们自己的线程中,它们可以跨线程移动,或者在较少数量的线程中轮询和使用(唯一的限制是每次执行一次只能由一个线程使用,如上文提到的)。
所以没有什么能阻止你在脚本函数中公开一个会产生一个线程(和相应的执行)的函数,但是执行之间的通信不会通过共享变量(就像你可能会在 Delphi 中做的那样),但会浏览您自己公开的函数(或外部变量)、返回值(使用“评估”方法,参见单元测试)、“共享”对象实例或“全局变量”。
“全局变量”是指 dwsGlobalVarsFunctions.pas 中定义的函数,可用于执行间数据交换。要激活它们,只需在项目中的某处设置“使用 dwsGlobalVarsFunctions”即可。
它们公开了一组 Read/WriteGlobalVar 函数,允许在同一 Delphi 进程中运行的所有脚本执行中存储和检索命名变量,并且从线程的角度来看,这些读取和写入是“原子的”。
| 归档时间: |
|
| 查看次数: |
628 次 |
| 最近记录: |