2016-04-25 5 views
1

Я не уверен, если я неправильно понял использование сопрограммы, но вот мой код:Err с помощью сопрограмму

talk = coroutine.create(function() 
print("I am speaking within 60 seconds") 
end) 

time = coroutine.create(function() 
if coroutine.status(talk) == running then 
for i = 60, 0, -1 do 
print(i) 
end 
sleep(1) 
else 
coroutine.resume(talk) 
end 

end) 
coroutine.resume(time) 

Все это печать, я говорю в течение 60 секунд, я ожидал, что сказать, что в обратном отсчете. Как это исправить?

+0

'coroutine.status (разговор) ==«работает»' –

ответ

0
talk = coroutine.create(function() 
print("I am speaking within 60 seconds") 
coroutine.resume(time) 
end) 

time = coroutine.create(function() 
for i = 60, 0, -1 do 
print(i) 
coroutine.resume(talk) 
end 

end) 

coroutine.resume(time) 
+0

Вы не можете возобновить нон-подвешенный сопрограмму. – siffiejoe

0
talk = coroutine.create(function() 
    print("I am speaking within 60 seconds") 
    coroutine.yield() 
end) 

time = coroutine.create(function() 
    for i = 60, 0, -1 do 
     coroutine.resume(talk) 
     print(i) 
    end 
end) 

coroutine.resume(time) 
+0

Теперь вы можете возобновить coroutine 'talk' дважды, а не один раз, как в OP. – siffiejoe

0

Вы звоните спать, но я не вижу, что функция объявлена ​​где-то. Вот модифицированная версия сна() реализованы:

local function sleep(time) 
    local sleep_until = os.time() + time 
    repeat until os.time() >= sleep_until 
end 

local time, talk 

talk = coroutine.create(function() 
    print("I am speaking in 60 seconds") 
    coroutine.resume(time) 
end) 

time = coroutine.create(function() 
    while true do 
     for i = 60, 0, -1 do 
      print(i) 
      sleep(1) 
     end 
     coroutine.resume(talk) 
    end 
end) 

coroutine.resume(time)