繁体   English   中英

ncurses,印刷品和当代艺术品收购字符串

[英]ncurses, print and contemporary acquire strings

用C编写的程序使用ncurses 使用while周期来连续检查是否有新消息到达队列:如果是,则将消息打印在屏幕上,然后从队列中删除:

while (condition)
{
if (queue_not_empty)
{
printw(element_from_queue);
refresh();
remove(element_from_queue);
}
}

但是,与此同时,该程序应该能够从用户处获取输入字符串,然后通过scanw将其存储在数组char message[100] 但是如果我放

while (condition)
{
if (queue_not_empty)
{
printw(element_from_queue);
refresh();
remove(element_from_queue);
}
scanw(message);
}

该循环将停止,直到用户没有键入字符串,并且程序仅用户输入后才打印队列的新消息。 它不应该是这样! 队列消息可以随时到达,应该打印出来; 用户消息可以随时到达,应该存储到数组中。

我想避免创建另一个线程,因为ncurses在多个线程中变得很奇怪。 无论如何,我将需要两个“同时期”的while周期,一个用于打印消息,一个用于读取用户输入。

可能有解决办法吗?

换句话说: ncurses是否可以在同一线程的同一线程中打印一些输出并从用户那里获取一些多个字符输入?

ncurses提供了用于读取具有超时 (甚至根本没有延迟 )的单个字符的功能。 这些对scanw无效(总是阻塞,等待几个字符):

  • 使用超时时,如果超时到期, getch将返回ERR而不是一个字符。
  • scanw可能在内部使用getch ,但是当getch返回ERR时无法继续。

而不是block ,您可以轮询输入。 如果在给定的时间间隔内没有可用的字符,则您的程序会暂时放弃,并且执行比等待字符更有用的操作。 可以将轮询输入的应用程序编写为一次接受一个字符,然后将其添加到缓冲区中,直到用户按Enter然后对完成的文本运行sscanf

使用常规C sscanf (从字符串读取),而不是使用scanw屏幕直接scanw

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM