Lua c-api: как определить сопрограмму / поток, участвующий в обратном вызове lua_pushcclosure?

Есть ли способ узнать, какой поток (сопрограмма), выполняющий сценарий Lua, является источником вызова lua_pushcclosure?

Чтобы управлять некоторыми вещами, относящимися к потокам lua (отложенная пауза / возобновление или частные переменные потока), мне нужно идентифицировать поток, участвующий в обратном вызове. Я знаю, что могу получить индекс потока при его создании с помощью lua_gettop, но я не могу найти способ его использовать, чтобы он помогал идентифицировать поток, когда вызов lua_pushcclosure запускается из сценария Lua.

Моя текущая система разрешает вызовы вложенных сценариев, поэтому сценарий может выполнять другие сценарии (каждый вызов вложенного сценария создает новый поток с тем же lua_state. Таким образом, lua_state используется для получения нескольких записей потоков в стеке).

Я использую Lua 5.2


person Valkea    schedule 08.09.2012    source источник
comment
Обратный вызов lua_pushcclosure lua_pushcclosure не является обратным вызовом. Вы имеете в виду, когда вызываете эту функцию?   -  person Nicol Bolas    schedule 08.09.2012
comment
Да, я говорю о том, когда функция вызывается из сценария lua. Функция, представленная через lua_pushcclosure, может быть вызвана из разных потоков, и мне нужно определить, какой из них.   -  person Valkea    schedule 08.09.2012


Ответы (1)


Если вы используете функцию C, которая была вызвана из Lua, и вы хотите знать, в каком потоке вы находитесь ... просто вызовите _ 1_.

person Nicol Bolas    schedule 08.09.2012