У меня есть функция прокрутки текста слева направо в интерфейсе NCurses, но это зависит от таймера каждые 500 мс или около того, чтобы правильно записать новый символ спереди и удалить предыдущий символ. Вот код:Асинхронный таймер внутри функции
void GekkoFyre::TuiHangouts::gui_scrollText(WINDOW *display, const char *msg,
const int &msgPosY)
{
size_t maxX = getmaxx(display);
size_t msgLen = strlen(msg);
short origPosY = 0;
short origPosX = 0;
getyx(display, origPosY, origPosX); // Obtain the original cursor position
if (msgLen > maxX) {
// size_t diff = (msgLen - maxX);
size_t i = 0;
for (i = maxX; i < msgLen; ++i) {
// Scroll the message from left to right, then vice versa, so that it fits within the
// designated window.
move(msgPosY, 0);
clrtoeol(); // Delete just the given line, <http://stackoverflow.com/questions/5072881/how-to-clear-a-specific-line-with-ncurses>
move(origPosY, origPosX); // Go back to the original cursor position
std::string tmp((msgLen - i), msg[(msgLen - i)]);
wattron(display, A_REVERSE); // Highlight selection
mvwaddstr(display, msgPosY, 0, tmp.c_str());
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
}
}
Я честно понятия не имею, работает ли это, потому что я не смог заставить его работать. Но есть ли такой таймер, как std::this_thread::sleep_for(std::chrono::milliseconds(500));
, который вы можете использовать в функции, но асинхронно? Это было бы красиво! Я провел некоторое исследование и наткнулся на std :: async и std :: thread, но они зависят от внешнего вида функции.
Любая помощь будет принята с благодарностью, спасибо.
Это, вероятно, не сработает, поскольку использует потоки (см. [FAQ] (http://invisible-island.net/ncurses/ncurses.faq.html#multithread)). –