Самый легкий способ заставить lua сценарий ожидать/приостанавливать/спать/блокировать в течение нескольких секунд?

Мой хак для этого:

1 - создать кнопку, охватывающую весь вид; 2 - отправьте его на задний план вашего представления, 3 - измените его тип с "Round Rect" на "Custom" в Инспекторе атрибутов, 4 - создайте действие 5 - реализуйте метод действия:

- (IBAction)bgTouched:(id)sender 
{
    //to dismiss keyboard on bg btn pressed
    [_userInput resignFirstResponder];
}

где _userInput - ваш выход TextField

32
задан Community 23 May 2017 в 12:34
поделиться

6 ответов

Вы хотите win.Sleep (миллисекунды) , мне кажется.

Да, вы определенно не хотите тратить время на ожидание, как вы описываете.

1
ответ дан 27 November 2019 в 20:03
поделиться

Я бы реализовал простую функцию, чтобы обернуть функцию сна хост-системы в C.

3
ответ дан 27 November 2019 в 20:03
поделиться

Чистый Lua использует только то, что есть в стандарте ANSI C. Модуль lposix Луиса Фигерайдо содержит многое из того, что вам нужно для более системных задач.

3
ответ дан 27 November 2019 в 20:03
поделиться

Вы не можете сделать это в чистом Lua, не потребляя CPU, но есть простой, непереносимый способ:

os.execute ("sleep 1")

(it будет блокировать)

Очевидно, это работает только в операционных системах, для которых "sleep 1" является допустимой командой, например Unix, но не Windows.

10
ответ дан 27 November 2019 в 20:03
поделиться

Я согласен с Джоном в отношении включения функции сна. Вы также можете использовать эту обернутую функцию сна для реализации функции паузы в lua (которая просто спит, а затем проверяет, менялось ли определенное условие время от времени). Альтернативой является использование крючков.

Я не совсем уверен, что вы имеете в виду, говоря о третьем пункте (разве команды обычно не завершаются до выполнения следующей?), Но ловушки могут помочь и с этим.

См .: Вопрос: Как правильно завершить поток Lua? для примера использования крючков.

2
ответ дан 27 November 2019 в 20:03
поделиться

[Я собирался опубликовать это как комментарий к сообщению Джона Кромарти , но не понял, что вы не можете использовать форматирование в комментарии.]

Я согласен. Перетаскивание его в оболочку с помощью os.execute () определенно сработает, но в целом вызовы оболочки обходятся дорого. Оборачивание некоторого кода C будет намного быстрее во время выполнения. В C / C ++ в системе Linux вы можете использовать:

static int lua_sleep(lua_State *L)
{
    int m = static_cast<int> (luaL_checknumber(L,1));
    usleep(m * 1000); 
    // usleep takes microseconds. This converts the parameter to milliseconds. 
    // Change this as necessary. 
    // Alternatively, use 'sleep()' to treat the parameter as whole seconds. 
    return 0;
}

Затем в main, do:

lua_pushcfunction(L, lua_sleep);
lua_setglobal(L, "sleep");

, где «L» - ваше lua_State. Затем в вашем скрипте Lua, вызываемом из C / C ++, вы можете использовать свою функцию, вызвав:

sleep(1000) -- Sleeps for one second
20
ответ дан 27 November 2019 в 20:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: