Есть ли способ прикрепить данные к сопрограмме или, по крайней мере, как-то идентифицировать другие сопрограммы?
Я пытаюсь реализовать API таймера, где таймеры контролируются хостом, который выглядит примерно такследующее на стороне Lua:
function callback()
local timer = ElapsedTimer()
...
end
function main()
local timer = CreateTimer(...)
StartTimer(timer, callback, ...)
end
Вызов StartTimer()
отправляет таймер и обратный вызов на сторону C, а сторона C в конечном итоге вызывает обратный вызов в новой сопрограмме.
Вызов ElapsedTimer()
должен вернуть данные, специфичные для этой сопрограммы / потока, то есть в этом случае таймер.
В псевдокоде:
int StartTimer(lua_State* L) {
auto timer = ...;
auto coroutine = ???
coroutine.userdata = &timer; // But probably store an actual structure with more pointers
return 0;
}
int ElapsedTimer(lua_State* L) {
auto coroutine = ???
auto timer = (Timer*)coroutine.userdata;
lua_pushlightuserdata(L, timer)
return 1;
}