| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2982 人关注过本帖
标题:有没有像kbhit()的非阻塞函数
只看楼主 加入收藏
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:15 
有没有像kbhit()的非阻塞函数
最近在捣鼓多线程,设置了一个线程负责读取用户的输入,有一个问题是不知道用户输入了一个整数还是两个,如果用scanf的话可能会一直等待。希望有一个像kbhit()的,没有输入了的话就不等了直接返回。
搜索更多相关主题的帖子: 多线程 用户 
2012-04-09 18:32
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
看起来,你是至少需要一个输入吧?也就是说如果还没输入就等待,有输入则判断是输入了几个整数,是不是?

如果是我猜的这种情况,那建议用字符串读入然后解析字符串。

如果不是我猜的情况,请描述的具体些。

重剑无锋,大巧不工
2012-04-09 18:38
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:0 
回复 2楼 beyondyf
不是那样,首先要判断用户有没有输入,有输入的话要把用户的输入全部读取,不能遗漏,也不能多读(比如用户只输入了两个,你认为有三个,那就会一直等)
版主的那个方法也可以解决这个问题,但是要写很多代码,不方便维护,因为输入的数据可能有很多种,差不多是自己再写一个scanf了,除非sscanf可以让指针后移,那就可以判断有没有读完。可能是我的经验不足,没想到好一点的方法?

酱油实习生
2012-04-09 21:13
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:8 
我还是不明白你的想法。用正则表达式解析字符串很方便的。如果是windows程序可以应用它的消息机制,比如在change事件里处理等等。

这都得具体问题具体分析,可能你不太愿意透露过多你的设计方案,这样确实不好给你更适合的建议。

重剑无锋,大巧不工
2012-04-09 22:27
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
这个问题,你还是没有表达清楚!
用一个标志,来暂停线程!当一定条件恢复线程!
你还是把你具体说清楚!

用心做一件事情就这么简单
2012-04-10 10:52
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:0 
好吧,我试一下能不能说明白……
有一个程序是多线程的,用户在使用的时候会输入几组的数字。过一段时间程序就要接收一次用户的输入。如果用户每次输入端数字个数都是固定的就可以直接用scanf来读取,但是如果不确定,那么就要保证一次读取完,不多也不少。比如用户输入了3个,我不能只读两个;如果我用scanf读取四个的话,虽然都三个读进了,但是scanf还要等用户再输入一个才返回,这样也不行。
偶然间看到kbhit()这样的函数,因此就想有没有一个读取函数,读取时先检查缓冲区,有数据就读取,没有就返回,不像scanf要等用户输入一个。
这个要求应该可以用其他的方法实现,比如读取前自己检查缓冲区等等。但是我想知道不用这种办法和正则表达式能不能解决,毕竟创新思维和视野很重要。
麻烦啦

酱油实习生
2012-04-10 18:51
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:5 
其实你这个要求和kbhit() 函数没有关系。

你只要加一个特特殊符号做为你输入的终止符就可以了。
假设你读未知的字符数是来输出的(假设 都是一样的)

但你满足字符结束的标志的时候你就处理这几个字符,然后把这些字符从这个缓冲取出来(里面其实有一个一个问题你,你正好改写缓冲系统
正在写字符。情况非常小,最好设2个缓冲最好(但也不是很好)这个我想按照我们的控制台的读入写出的缓冲一样的方式是可以的。
你可以再想想吧,但用互斥不知道好不好。。)
我的现在想法就这么多。

用心做一件事情就这么简单
2012-04-11 18:21
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
其实发现我想多了,
你把scantf 和处理函数放在一起就不会出现那种正好在读和写的冲突了。

用心做一件事情就这么简单
2012-04-12 07:56
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:0 
回复 8楼 小鱼儿c
特殊字符?可是我不想这样要求使用者……

酱油实习生
2012-04-13 19:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
都没搞明白你的目的是什么、想做到怎样的效果。

授人以渔,不授人以鱼。
2012-04-13 21:50
快速回复:有没有像kbhit()的非阻塞函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027168 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved