2017-03-29 6 views
1

私は現在、Lua 5.1側でLuajitを使用していますが、現在、Lua C API内に「Wait」という関数を登録しようとしています。この関数の主な目的は、現在のスレッドを一時停止することです。Lua/Luajit:現在のLuaスレッドを一時停止

使用例:

print("Working"); 
Wait() 
print("A"); 

期待通りの機能が動作しませんが。ここに私のC + +のコードです。

#include <iostream> 
#include <Windows.h> 

extern "C" { 
    #include "Luajit/luajit.h" 
    #include <Luajit/lua.h> 
    #include <Luajit/lualib.h> 
    #include <Luajit/lauxlib.h> 
} 


static int wait(lua_State* lua) { 
    return lua_yield(lua, 0); 
} 

int main() { 
    lua_State* lua = luaL_newstate(); 

    if (!lua) { 
     std::cout << "Failed to create Lua state" << std::endl; 
     system("PAUSE"); 
     return -1; 
    } 

luaL_openlibs(lua); 
lua_register(lua, "Wait", wait); 

lua_State* thread = lua_newthread(lua); 

if (!thread) { 
    std::cout << "Failed to create Lua thread" << std::endl; 
    system("PAUSE"); 
    return -1; 
} 

int status = luaL_loadfile(thread, "Z:/Projects/Visual Studio/Examples/Lua/Debug/Main.lua"); 

if (status == LUA_ERRFILE) { 
    std::cout << "Failed to load file" << std::endl; 
    system("PAUSE"); 
    return -1; 
} 

int error = lua_pcall(thread, 0, 0, 0); 

if (error) { 
    std::cout << "Error: " << lua_tostring(thread, 1) << std::endl; 
} 

system("PAUSE"); 
return 0; 
} 

私は、私は次のような出力を得る上で掲載のLuaスクリプトをアップロード:

Working 
Error: attempt to yield across C-call boundary 
Press any key to continue . . . 

を私は今、4年以上のためのLuaでプログラミングされています。私は最近、C APIを使用し始めました。以前はCコールの境界エラーは見たことがありませんでした。私はいくつかのグーグルをして友達に尋ねると誰も私を助けることができないようだ。私のコードに何が間違っているのでしょうか?

C++でlua_yield(lua、0)関数を呼び出すと、エラーが発生します。

私は次の質問の回答を試みましたが、何も動作していないようです。

http://stackoverflow.com/questions/8459459/lua-coroutine-error-tempt-to-yield-across-metamethod-c-call-boundary 
+0

[ルアコルーチンエラー:metamethod/Cコール境界を越えて降伏する可能性があります](http://stackoverflow.com/questions/8459459/lua-coroutine-error-tempt-to-yield-across-metamethod)の可能な複製-c-call-boundary) – Skewled

+0

いいえ、その答えは役に立たなかった。 – Kurieita

答えて

2

lua_pcall可逆コルーチンが開始されません。コルーチンを開始する適切な機能はlua_resumeです。

+0

うわー。私はそれを理解していないとは信じられません。どうもありがとうございます。 – Kurieita

関連する問題