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