forked from zupet/LuaTinker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sample6.cpp
103 lines (81 loc) · 2.34 KB
/
sample6.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// sample3.cpp : LuaTinker 의 클래스 기능을 알아본다.
//
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
};
#include "lua_tinker.h"
// 함수 형태가 int(*)(lua_State*) 또는 int(*)(lua_State*,T1) 일 경우만 lua_yield() 를 쓸 수 있다.
// 함수 인자가 더 필요할 경우 lua_tinker.h 의 "functor (non-managed)" 코멘트 부분을 참고해서 직접 추가할 것
int TestFunc(lua_State* L)
{
printf("# TestFunc 실행중\n");
return lua_yield(L, 0);
}
int TestFunc2(lua_State* L, float a)
{
printf("# TestFunc2(L,%f) 실행중\n", a);
return lua_yield(L, 0);
}
class TestClass
{
public:
// 함수 형태가 int(T::*)(lua_State*) 또는 int(T::*)(lua_State*,T1) 일 경우만 lua_yield() 를 쓸 수 있다.
// 함수 인자가 더 필요할 경우 lua_tinker.h 의 "class member functor (non-managed)" 코멘트 부분을 참고해서 직접 추가할 것
int TestFunc(lua_State* L)
{
printf("# TestClass::TestFunc 실행중\n");
return lua_yield(L, 0);
}
int TestFunc2(lua_State* L, float a)
{
printf("# TestClass::TestFunc2(L,%f) 실행중\n", a);
return lua_yield(L, 0);
}
};
int main()
{
// Lua 를 초기화 한다.
lua_State* L = lua_open();
// Lua 기본 함수들을 로드한다.- print() 사용
luaopen_base(L);
// Lua 문자열 함수들을 로드한다.- string 사용
luaopen_string(L);
// TestFunc 함수를 Lua 에 등록한다.
lua_tinker::def(L, "TestFunc", &TestFunc);
lua_tinker::def(L, "TestFunc2", &TestFunc2);
// TestClass 클래스를 Lua 에 추가한다.
lua_tinker::class_add<TestClass>(L, "TestClass");
// TestClass 의 함수를 등록한다.
lua_tinker::class_def<TestClass>(L, "TestFunc", &TestClass::TestFunc);
lua_tinker::class_def<TestClass>(L, "TestFunc2", &TestClass::TestFunc2);
// TestClass 를 전역 변수로 선언한다.
TestClass g_test;
lua_tinker::set(L, "g_test", &g_test);
// sample3.lua 파일을 로드한다.
lua_tinker::dofile(L, "sample6.lua");
// Thread 를 시작한다.
lua_newthread(L);
lua_pushstring(L, "ThreadTest");
lua_gettable(L, LUA_GLOBALSINDEX);
// Thread 를 시작한다.
printf("* lua_resume() 호출\n");
lua_resume(L, 0);
// Thread 를 다시 시작한다.
printf("* lua_resume() 호출\n");
lua_resume(L, 0);
// Thread 를 다시 시작한다.
printf("* lua_resume() 호출\n");
lua_resume(L, 0);
// Thread 를 다시 시작한다.
printf("* lua_resume() 호출\n");
lua_resume(L, 0);
// Thread 를 다시 시작한다.
printf("* lua_resume() 호출\n");
lua_resume(L, 0);
// 프로그램 종료
lua_close(L);
return 0;
}