我正在尝试使用computercraft在Tekkit上创建计算机系统/网络。
Computecraft是一种基于Lua的修改,在Minecraft / Tekkit和其他修改包中运行。
基本上,我目前正在使用无线路由器执行此操作:
rednet.open('top') -- Open Connection to the wireless router
print ("test")
input = read()
rednet.receive() -- Listen for messages send/broadcasted
if message then
print (message)
end
我正在尝试对我的所有系统执行更改,如下所示:
rednet.open ('top')
-- Do all normal stuff
rednet.receive()
if message == "Lock202" then
os.pullEvent = os.pullEventRaw
term.clear()
term.setCursorPos(1,1)
print ("Alert In Progress, Terminal Locked")
end
通过做所有正常的事情,我希望用户能够导航和使用计算机的功能。但是当呼叫rednet.receive()
时,它会冻结并等待收到的消息。
我希望它在后台运行,并且仅在收到消息时才会执行。
我试过看文档,帮助。并且考虑将这个问题提交给SO,因为可以使用Lua Coders。
答案 0 :(得分:2)
http://computercraft.info/wiki/Parallel.waitForAll
这是一个基本多线程你的程序的函数......所以你可以做...
function listen()
while true do
id, msg, distance = rednet.receive()
FUNCTION_THAT_RUNS_STUFF(id, msg, distance)
sleep(1)
end
end
function main_loop()
while true do
--do your other stuff in here
end
end
--end of file run everything
parrallel.waitForAll(listen, main_loop)
答案 1 :(得分:0)
命令rednet.receive()可以在其参数中包含一个参数,即“超时”。
这是以秒为单位测量的。它也是一个浮点数(十进制),例如4.50,1.23。等
这意味着它会在那段时间内收到。
实现所需内容的一种好方法是让另一台计算机不断接收消息,然后向计算机发出红石信号,以便进行模块化接收和写入
的内容。function Check()
If rs.getInput("back") then
local id, message = rednet.receive(5)
print("Receiving Message")
end
end
另一台计算机会这样做:
computerid = 50
id, message = rednet.receive()
rs.setOutput("back",true)
sleep(1)
rednet.send(computerid, message)
rs.setOutput("back",false)
计算机ID将等于您想要运行的原始计算机的ID。您还必须在运行代码时定期使用Check()函数,除非收到消息,否则它将不会影响计算机,在这种情况下它接收“rednet.receive”中指定的时间量参数。
希望这有帮助
- EwilDawe
答案 2 :(得分:0)
我做的是我有1台运行os.pullEvent,还有一些其他的收集信息并通过rednet发送,这使得只有一台PC被卡住了,尽管事实上其他的都很漂亮非常不可用,当然如果你做了我所做的,你可以让它检测密钥和rednet_message等等。