有没有办法在 DWScript 中设置入口点?
例如,如果我开始执行脚本,我希望它执行一个过程 Main,而不是常规入口点中的代码(begin ... end.)。
我知道可以从 Delphi 执行函数,但我不确定这是否完全相同。
除了编写你的procedure Main();
然后让你的常规脚本入口点只包含调用之外Main
,这可能不是你想要的,不,在 DWS 中没有办法做到这一点。
尽管在语法上进行了所有创新,DWS 仍然是 Pascal,并且仍然按照 Pascal 的工作方式工作。要求某种命名的Main
例程将与 Pascal 风格大相径庭。
编辑:回答评论中发布的澄清:
如果你想让你的脚本产生一个新的脚本线程,你必须在外部 Delphi 代码中处理它。在撰写本文时,DWS 系统还没有内置任何多线程概念。如果您想这样做,您可以这样做:
创建一个名为SpawnThread(EntryPoint: string)
. 它的 eval 方法(在 Native-Delphi-land 中)会产生一个新线程来加载当前脚本,然后找到具有指定名称的例程并执行它。
这是在没有语言级别支持的情况下让它工作的唯一方法。如果您想从 DWS 中生成线程,请尝试将其作为功能请求添加到问题跟踪器。
直接调用函数在
https://code.google.com/p/dwscript/wiki/FirstSteps#Functions
如果你想在不同的线程中执行一个函数,你需要一些 Delphi 端代码来创建一个新线程,一个新的执行,然后调用你的函数。然后,主执行和线程执行将彼此沙箱化(因此无法共享共享全局变量等)。
如果您需要在线程之间共享数据,您可以通过公开函数或外部变量来做到这一点,这将在适当的同步和锁定的情况下调用 Delphi 代码(什么是“正确的”取决于您的代码想要做什么,就像在多线程中一样......)。
请注意,可以在脚本执行之间传递对象、接口和动态数组(前提是它们是同一程序的执行),但就像使用常规代码一样,您必须明确使用锁、临界区或互斥锁。