@napo1eon

Как вызвать main поток из созданного потока lua lanes?

здравствуйте.. кто нибуть работал с библиотекой Lua Lanes? не думал что так сложно будет в lua с потоками .. хочу запустить таймер в отдельном потоке, чтобы он каждые 2 сек калбэкал функцию уже из главного потока .. при этом чтобы главный поток небыл зациклин .. проблема в том что я не могу вызвать функцию main2 в главном потоке ... по этой причине не понятно как вызывать функции из своей программы .. подскажите пж..

local linda = lanes.linda()

local main2 = function(str)
    --core.ErrorMassage(str)
    print("!!!!!!!!!")
end

_G = {["m"] = main2}

    f = function(str) core.ErrorMassage("sleep "..str) end

    lanes.gen("*",{ globals =  _G }, function(  ) 
--        lanes.require ("core")   
        print("start!!!!")
        while true do
            local clock = os.clock
            local t0 = clock()
            while clock() - t0 <= 2 do end
            m()       
        end
        print("and")
    end ) (  )

    print("ands")
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 1
@16tomatotonns
Томат
Несмотря на кажущуюся простоту, lua lanes, в момент спавна потока, создаёт копию исполняемой функции этого потока (с копией всех замыканий), передаёт её новому lua_State и отправляет на исполнение.
В данной модели, всё общение должно происходить системой сообщений: дочерний поток посылает сообщения основному, основной считывает и реагирует. Прямой обратной связи через функции не существует, подобные вещи должны быть налажены на уровне самого языка а не сторонних библиотек.

Типовая схема работы с lua lanes - менеджер потоков, который закидывает им задачи и считывает ответы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы