Егор (Автор тем)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Как в lua api c++, приостановить выполнение функции через определенное время., Lua api
 
Здравствуйте, уважаемые программисты.
Есть вопрос  как в lua api c++, приостановить выполнение функции через определенное время.

Обычно приостановление функций, если lua_resume вернула yield.

Как тут для примера.

Код
int my_yield(lua_State* L) {
   return lua_yield(L, 0);
};
const char* LUA = R"(
function foo()
print(" func foo \n")
end

function main()
for i = 1, 3 do
print(" func main "..i.."\n")
my_yield()
end  end
)";
int main(int argc, char* argv[]) {
   lua_State* L = luaL_newstate();/*Функция создает новое Lua состояние. Она вызывает lua_newstate с функцией-*/
   luaL_openlibs(L);
   lua_State* L1 = lua_newthread(L);
   cout << "\n";
   lua_register(L, "my_yield", my_yield);
   checkerror(L, LUA);
   lua_getglobal(L, "main");
   while (true) {
      int ret = lua_resume(L, L1, 0);
      if (ret == LUA_YIELD) {
         lua_getglobal(L1, "foo");
             lua_pcall(L1, 0, 0, 0);
      }
      else if (ret == 0) {

         break;
      }
   };

   lua_close(L);
   return 0;
};




Функция main вызывает функцию my_yield и функция main приостановиться уступая функции foo.

Как это сделать без вызова функции my_yield?
Код
int my_yield(lua_State* L) {
   this_thread::sleep_for(chrono::milliseconds(306));// задержка
   return lua_yield(L, 0);
};

const char* LUA = R"(
function foo()
print(" func foo \n")
end

function main()
while true do

print(" main \n")
end  end
)";
int main(int argc, char* argv[]) {
   lua_State* L = luaL_newstate();/*Функция создает новое Lua состояние. Она вызывает lua_newstate с функцией-*/
   luaL_openlibs(L);
   lua_State* L1 = lua_newthread(L);
   checkerror(L, LUA);
   lua_getglobal(L, "main");// получить функцию.  
   while (true) {
      thread th(my_yield, std::ref(L)); //th.detach();// независимый поток.        
      int ret = lua_resume(L, L1, 0);
      cout << ret << endl;
      if (ret == LUA_YIELD) {
         lua_getglobal(L1, "foo");
         lua_pcall(L1, 0, 0, 0);
         break;
      }
      else if (ret == 0) {/*Когда функция lua_resume возвращается, стек содержит все значения,
      переданные в lua_yield, или все значения, возвращенные телом функции.*/

      }
   };
      
   lua_close(L);
   return 0;
};
Класс для lua api c++, Занимаюсь lua api c++. Хочу реализовать класс, но что-то не получается,
 
Здравствуйте уважаемые программисты. Занимаюсь lua api c++.
Хочу реализовать класс, но что-то не получается, Помогите пожалуйста.
Скрытый текст

как использовать на lua?

obj = new(42)
obj:set(15)
print(obj:get())  
Изменить автодополнение кода в IntelliJ IDEA
 
Здравствуйте уважаемые программисты. Пишу скрипты на языке lua в ide IntelliJ IDEA. Она очень похожа на pycharm для python. Всё нравится, но есть один ньюанс, когда я пишу pri, нажимаю enter код автодополняется на print, а мне нужен print() Как сделать чтобы автоматическом добавлялись 2 круглые скобки в конце функции. Подскажите, пожалуйста.
lua наследование, lua ооп
 
Подскажите пожалуйста, как наследовать класс? Не получается выдаёт ошибку

Код
local car  = {} -- Прежде чем создавать экземпляры объекта, необходимо описать соответствующий ему класс.
car.__index = car  --__index содержит указатель на сам класс. Это нужно будет для правильной работы оператора self
function car:set(model, color) --инициализируем поля класса
local self = setmetatable({},car) --далее идет превращение таблицы в "класс", объяснять не буду, т.к для этого нужна отдельная статья 
self.model = model -- 
self.color = color --  
return self
end 
function car:get() --функция получения результата 
return self.model, self.color 
end 
moto = {} -- инициализируем класс мото 
function moto:pet() --переназначение метода 
return "new" 
end 
setmetatable(moto,{__index = car}) --наследуемся 
m = moto.set("URAL","BLUE") --меняем название и цвет 
print(m:get()) -->мы увидим 2000 year 
print(m:pet()) --> URAL BLUE 


Страницы: 1
Наверх