Lua coroutines and C++

本文介绍了一个使用Lua协程与C++进行交互的例子。通过一个简单的计数器程序展示了如何从C++中创建并控制Lua线程,以及如何在两者间传递数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lua coroutines and C++

Tonight I played around with coroutines in Lua. After some Googling I figured out how to create and communicate with a Lua-thread from C++. It turned out to be really simple.

The lua program “loop.lua”

1
2
3
4
5
6
7
8
9
10
counter = 0
 
function loop()
     while counter
     do
         print("Sending " .. counter);
         coroutine . yield(counter);
         counter = counter + 1 ;
     end
end

The C++ program

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
#include <stdio.h>
 
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
 
int main ( void )
{
     lua_State *L = lua_open();
     luaL_openlibs(L);
 
     if (!luaL_loadfile(L, "loop.lua" )) {
         lua_pcall(L, 0, 0, 0);
         lua_State *L2 = lua_newthread(L);
         lua_getglobal(L2, "loop" );
 
         while (1) {
             puts ( "while top" );
             int res = lua_resume(L2, 0);
             if (res != 0) {
                 break ;
             }
 
             if (lua_isnumber(L2, lua_gettop(L2)) == 1) {
                 printf (
                     "Got %d\n" ,
                     lua_tonumber(L2, lua_gettop(L2))
                 );
             }
         }
     }
 
     lua_close(L);
     return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值