我有一個使用Lua腳本的網絡應用程序。在啓動應用程序時,我創建一個全局Lua狀態並加載所有包含各種函數的腳本文件,併爲每個連接的客戶端創建一個Lua線程,以用於該連接。取消主機收益
// On start
var GL = luaL_newstate();
// register functions...
// load scripts...
// On connection
connection.State = lua_newthread(GL);
當使用腳本的請求進來時,我得到全局函數並調用它。
var NL = connection.State;
var result = lua_resume(NL, 0);
if (result != 0 && result != LUA_YIELD)
{
// error...
result = 0;
}
if (result == 0)
{
// function returned...
}
現在,一些腳本需要從客戶端響應某些東西,所以我在這些功能中屈服,等待它。當響應進入時,腳本將以lua_resume(NL, 1)
恢復。
// Lua
text("How are you?")
local response = select("Good", "Bad")
// Host
private int select(IntPtr L)
{
// send response request...
return lua_yield(L, 1);
}
// On response
lua_pushstring(NL, response);
var result = lua_resume(NL, 1);
// ...
我的問題是,我需要能夠取消該產量,從Lua中的函數返回,沒有執行在Lua的功能更多的代碼,而無需增加額外的代碼的腳本。換句話說,我基本上想讓Lua線程拋出一個異常,重新開始,並忘記它曾經執行過這個函數。
這可能嗎?
我認爲有一件事可以奏效,但沒有,正在呼籲lua_error
。結果是撥打lua_error
致電SEHException
。我假設,因爲腳本目前沒有運行,但屈服。