今天调试代码的时候,遇到了一个小坑,打印的输出信息一致不对,困扰了一天各种想不明白,后来还是通过另一个方式算是解决了这个问题,也算是skynet.errro()的一个小坑吧。对于我这种新手skynet学习者来说。下面直接上代码
首先我测试的是 skynet.pack()、skynet.unpack、skynet.trash()这三个函数。我在C层分别加了打印。测试调用情况,以及内存释放问题
分别加了打印,重新编译
那直接上测试代码
skynet.start(function ( ... )
skynet.error("first skynet service",skynet.address(skynet.self()))
skynet.error(skynet.self())
skynet.error("-----------------------")
local msg,sz = skynet.pack("lpl",28)
skynet.error("-----------------------")
local name,age = skynet.unpack(msg,sz)
skynet.error(name,age)
skynet.trash(msg,sz)
skynet.error("-----------------------")
end)
按照单线程的逻辑来说 打印顺序应该是
我觉得是:
first skynet service :0100000a
16777226
-----------------------
luaseri_pack....
-----------------------
luaseri_unpack....
lpl 28
ltrash.....
-----------------------
然而却出乎意料
顺序有点混乱,有点想不明白,整了一天,后来换了一种方式打印,直接把skynet.error换成print
打印如下
skynet.start(function ( ... )
print("first skynet service",skynet.address(skynet.self()))
print(skynet.self())
print("-----------------------")
local msg,sz = skynet.pack("lpl",28)
print("-----------------------")
local name,age = skynet.unpack(msg,sz)
print(name,age)
skynet.trash(msg,sz)
print("-----------------------")
end)
这下逻辑就清晰多了,看来skynet.error估计是个异步的过程,暂未研究c底层,等lua层弄明白了,再去解决这些原理问题吧