私は現在、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
[ルアコルーチンエラー:metamethod/Cコール境界を越えて降伏する可能性があります](http://stackoverflow.com/questions/8459459/lua-coroutine-error-tempt-to-yield-across-metamethod)の可能な複製-c-call-boundary) – Skewled
いいえ、その答えは役に立たなかった。 – Kurieita