如何用C线程多次调用lua函数

时间:2016-11-12 15:25:19

标签: c multithreading lua

以下代码每次都在不同的部分崩溃,原因不同。尝试了一切。我希望能够打电话给#34;睡觉"从lua脚本和多次调用lua函数没有我的C程序必须等待lua完成。在我的例子中,我"模拟"位置x = 100y = 200点击500次鼠标,速度为每毫秒1次点击。

#include <windows.h>
#include <lua.hpp>

struct MouseClick{
    lua_State *L;
    int x, y;
};

int sleep(lua_State *L)
{
    Sleep(lua_tointeger(L, 1));
    return 0;
}

void onClicK(lua_State *L, int x, int y)
{
    lua_getglobal(L, "onClick");

    lua_newtable(L);
    lua_pushinteger(L, x); lua_setfield(L, -2, "x");
    lua_pushinteger(L, y); lua_setfield(L, -2, "y");

    lua_pcall(L, 1, 0, 0);
}

void callThread(LPVOID arg)
{
    MouseClick *m = (MouseClick*) arg;
    onClicK(m->L, m->x, m->y);
}

int main()
{
    lua_State *L = luaL_newstate();
    if (luaL_loadfile(L, "test.lua"))
    {
        printf("Script not loaded.\n");
        return 1;
    }
    luaL_openlibs(L);
    lua_register(L, "sleep", sleep);
    luaL_dofile(L, "test.lua");

    for(int i = 0; i < 500; i++, Sleep(1))
    {
        MouseClick m = {lua_newthread(L), 100, 200};
        CreateThread(0, 0, (LPTHREAD_START_ROUTINE) callThread, &m, 0, 0);
    }

    getchar();
}

Lua方:

function onClick(c)
  print(c.x, c.y)
  sleep(3000)
end

0 个答案:

没有答案