有没有办法在DWScript中设置入口点?
例如,如果我开始执行一个脚本,我希望它执行一个过程Main,而不是常规入口点中的代码(begin ...结束。)。
我知道从Delphi执行函数是可能的,但我不确定这是否完全相同。
发布于 2013-02-28 07:52:15
除了编写procedure Main();,然后让常规脚本入口点只包含调用Main之外,这可能不是您想要的,不,在DWS中没有办法做到这一点。
尽管DWS在语法上有所创新,但它仍然是Pascal,它的工作方式仍然是Pascal。请求某种命名的Main例程将从根本上背离Pascal风格。
编辑:要回答评论中发布的说明:
如果你想让你的脚本产生一个新的脚本线程,你必须在外部的Delphi代码中处理它。在撰写本文时,DWS系统还没有任何内置的多线程概念。如果你想这样做,你可以这样做:
创建一个名为SpawnThread(EntryPoint: string)之类的外部例程。它的eval方法(在Native-Delphi-land中)将产生一个新线程,该线程加载当前脚本,然后找到具有指定名称的例程并执行它。
这大概是在没有语言级支持的情况下让它工作的唯一方法。如果您想要一种从DWS中派生线程的方法,可以尝试将其作为特性请求添加到the issue tracker中。
发布于 2013-02-28 16:48:34
直接调用函数在中有详细说明
https://code.google.com/p/dwscript/wiki/FirstSteps#Functions
如果您想在另一个线程中执行函数,则需要一些Delphi端代码来创建新线程、新执行,然后调用您的函数。然后,主执行和线程执行将被彼此沙箱隔离(因此不能共享、共享全局变量等)。
如果您需要在线程之间共享数据,可以通过公开函数或外部变量来实现,这将使用适当的同步和锁调用到Delphi代码中(什么是“适当的”将取决于您的代码想要做什么,就像总是在多线程中一样……)。
请注意,可以在脚本执行之间传递对象、接口和动态数组(假设它们是同一个程序的执行),但就像常规代码一样,您必须显式地使用锁、临界区或互斥。
https://stackoverflow.com/questions/15124697
复制相似问题