getchar,scanf,getch,这些,如果用户没有输入就会阻塞,如果不希望阻塞,应该怎么办?
网上搜了一下,Linux可以用 fcntl,但 Windows 就不行了(可以用 GetAsyncKeyState 检查按键,但是不能知道stdin 是否有内容)
getchar,scanf,getch,这些,如果用户没有输入就会阻塞,如果不希望阻塞,应该怎么办?
网上搜了一下,Linux可以用 fcntl,但 Windows 就不行了(可以用 GetAsyncKeyState 检查按键,但是不能知道stdin 是否有内容)
windwos上有ioctl
可以实现,不过这只是设置文件描述符的属性而已,非阻塞的输入还是要配置对应的API才行
找到一个例子不知道是不是你想要的,socket和IO使用的文件描述符是一样的
这些东西都是可以谷歌出来的。。
关于非阻塞函数,首先,我在这里列举一个demo
/* This program loops until the user
* presses a key. If _kbhit returns nonzero, a
* keystroke is waiting in the buffer. The program
* can call _getch or _getche to get the keystroke.
*/
#include <conio.h>
#include <stdio.h>
int main( void )
{
/* Display message until key is pressed. */
while( !_kbhit() )
_cputs( "Hit me!! " );
/* Use _getch to throw key away. */
printf( "\nKey struck was '%c'\n", _getch() );
}
输出结果为:
从函数的架构可以看出,kbhit()是一个C和C++函数,用于非阻塞地响应键盘输入事件。其原理是检查当前是否有键盘输入,若有则返回一个非0值,否则返回0。
真诚的希望我的回答可以帮到你和遇到这个问题的其他朋友!
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
Windows有的。
用_kbhit()(因为是立即返回的,你可能要放到循环里),判断是不是有键按下,然后用_getch()取走。