实现一个可以阻塞标准输入的模板函数
2009-10-08 13:59
302 查看
逛论坛就是由收获,今天又看到一个有趣的东西,设置标准输个入等待超时,因为比较熟悉linux环境,所以linux下很快用select实现了,但是windows上的select无法监视标准IO的3个句柄,所以郁闷很久,想用钩子又是在太麻烦了,百思不的要领,回过头,发现还有一个kbhit可供使用,真是峰回路转啊,嘿嘿,大家共享:)
#ifndef TIMEINPUT_H__ #define TIMEINPUT_H__ #include <iostream> #include <time.h> #ifdef WIN32 #include <conio.h> #include <windows.h> #define sleep Sleep #elif defined _LINUX #include <unistd.h> #include <sys/types.h> #endif template<class T> static inline int Tread(T& _input,int _timeout) { #ifdef WIN32 time_t begin = time(0); while (1) { if (kbhit()) { std::cin>>_input; break; } else if (time(0)-_timeout>=begin) { return -1; } sleep(1); } #elif defined _LINUX fd_set read_set; FD_ZERO(&read_set); FD_SET(0,&read_set); struct timeval time; time.tv_sec = _timeout; time.tv_usec = 0; switch(select(1,&read_set,NULL,NULL,&time)) { case 0: case -1: return -1; default: if (FD_ISSET(0,&read_set)>0) { std::cin>>_input; return 0; } else { return -1; } } #endif return 0; } #endif int main() { char i[90] = {0}; Tread(i,3); std::cout<<i<<std::endl; return 0; };
相关文章推荐
- 实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例如:输入t
- 实现一个"可变二维数组",这个二维数组的行数要求用户从键盘输入,每行的元素个数仍由用户从键盘输入. //数组元素值用户可以自定义.最后把二维数组打印出来.不要忘记释放数组内存. /*void main
- 2.5 输入一个单精度浮点数,将其向零舍入到整数。说明:向零舍入的含义是,正数向下舍入,负数向上舍入。提示:可以使用强制类型转换来实现
- 不同的取法输出顺序可以不考虑。取字符( 从标准输入读入一个由字母构成的串(不大于30个字符)。从该串中取出3个不重复的字符,求所有的取法。取出的字符,要求按字母升序排列成一个串。)
- 编写一个多线程函数实现对数组排序,要求: 1.至少用两个线程 2.数组的元素值可以事先定义好,或者可以从键盘输入(增加一个线程)。 3.用一个线程对数组排序,用另一个线程输出排序结果。 4.保证先排好序,再输出。
- Mouse without Borders是微软的一个软件实验项目,这款软件可让鼠标自由在局域网中的多台电脑间移动,键盘输入实现无缝切换,还可以直接用鼠标相互拖拽文件。 如果经常需要同时使用两台以
- 0901假设存在一个可以从标准输入读入字母并且将其从小写转换为大写输出的可执行程序upcase
- 从标准输入读入一个由字母构成的串(不大于30个字符)。从该串中取出3个不重复的字符,求所有的取法。取出的字符,要求按字母升序排列成一个串。不同的取法输出顺序可以不考虑。
- 实现编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。
- System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。 其函数原型是: public static void arraycopy(Object src, int
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字
- java中有几种方法可以实现一个线程?用什么关键字修饰同步方法 stop()和suspend()方法为何不推荐使用?
- 转载的标准文档:C语言实现一个简单的单向链表list
- C语言实现一个Window控制台带彩色,且可以用方向键选择并确认的菜单式列表(二) ---学生信息管理系统
- JXSE是否可以实现非阻塞IO?
- python实现编写一个@performance,它可以打印出函数调用的时间。
- iOS实现一个意见反馈类型的输入栏
- 黑马程序员—编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期, *程序计算这一天是星期几,并且计算出是一年中的第几天。 */
- 用js实现输入一个链表,输出该链表中倒数第k个结点。
- 创建一个CPoint类,代表平面直角坐标系中的点,创建构造函数和运算符重载函数, 运算符重载为类重载(非友元重载),可以实现计算两个点之间的距离。可以根据需要 加入自己的成员变量或成员函数