2013-02-27 26 views
3

有沒有方法在DWScript中設置入口點?例如,如果我啓動腳本執行,我希望它執行一個過程Main,而不是常規入口點(begin ... end。)中的代碼。在DWScript中設置入口點

我知道可以從Delphi執行函數,但我不確定這是否完全相同。

回答

2

除了編寫您的procedure Main();,然後讓您的常規腳本入口點只包含Main,這可能不是您想到的,不,在DWS中沒有辦法做到這一點。

對於語法上的所有創新,DWS仍然是Pascal,它仍然以Pascal的工作方式工作。要求某種名字爲Main的例行公事將會與帕斯卡風格大相徑庭。

編輯:要回答張貼在留言澄清:

如果你希望你的腳本生成一個新的腳本線程,你必須處理它在外部Delphi代碼。在撰寫本文時,DWS系統沒有任何內置多線程的概念。如果你想這樣做,你可以這樣做:

創建一個名爲SpawnThread(EntryPoint: string)之類的外部例程。它的eval方法(出自Native-Delphi-land)會生成一個加載當前腳本的新線程,然後找到具有指定名稱的例程並執行它。

這就是您無法獲得語言級別支持的唯一方法。如果您想從DWS中產生線程,請嘗試將其添加爲the issue tracker的功能請求。

+0

我的意圖不是將此過程用作單個入口點。我想讓執行調用一個方法,該方法可以在單獨的線程中啓動第二次執行。我遇到的問題是我不確定如何區分初始(主要)執行和線程執行,因爲線程執行不得不以某種方式執行不同的代碼。我的想法是在線程的另一個函數中輸入執行。 – FHannes 2013-02-28 00:03:58

+0

@FHannes:編輯。 – 2013-02-28 00:13:31

+0

這種方法本質上是我希望做的。在腳本中調用一個函數,該函數在Delphi代碼中產生一個新的線程,該線程以不同的例程輸入腳本。但是我不完全確定如何在不再執行主入口點的情況下實現這一點? – FHannes 2013-02-28 01:49:51

2

調用函數直接在

https://code.google.com/p/dwscript/wiki/FirstSteps#Functions

如果你想在不同的線程中執行的函數,你需要一些德爾福端代碼來創建一個新的線程explicited,新的執行,然後調用你的函數。然後,主線程和線程執行將相互進行沙箱處理(因此不能共享共享全局變量等)。

如果你需要在線程之間共享數據,你可以通過暴露函數或外部變量來實現,這些函數或外部變量可以通過適當的同步和鎖定調用到Delphi代碼中(什麼是「正確的」將取決於你的代碼想要做,就像在多線程中一樣......)。

請注意,可以在腳本執行之間傳遞對象,接口和動態數組(只要它們執行同一個程序),但是就像使用常規代碼一樣,您必須使用鎖,關鍵段或互斥體明確。