|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 有没有像kbhit()的非阻塞函数
我的收件箱(0)
共有
2982
人关注过本帖
标题:
有没有像kbhit()的非阻塞函数
只看楼主
加入收藏
墨清扬
等 级:
蝙蝠侠
威 望:
1
帖 子:294
专家分:817
注 册:2011-10-4
结帖率:
100%
楼主
收藏
已结贴
√
问题点数:20 回复次数:15
有没有像kbhit()的非阻塞函数
最近在捣鼓多线程,设置了一个线程负责读取用户的输入,有一个问题是不知道用户输入了一个整数还是两个,如果用scanf的话可能会一直等待。希望有一个像kbhit()的,没有输入了的话就不等了直接返回。
酱油实习生
2012-04-09 18:32
举报帖子
使用道具
赠送鲜花
beyondyf
等 级:
贵宾
威 望:
103
帖 子:3282
专家分:12654
注 册:2008-1-21
第
2
楼
收藏
得分:0
看起来,你是至少需要一个输入吧?也就是说如果还没输入就等待,有输入则判断是输入了几个整数,是不是?
如果是我猜的这种情况,那建议用字符串读入然后解析字符串。
如果不是我猜的情况,请描述的具体些。
重剑无锋,大巧不工
2012-04-09 18:38
举报帖子
使用道具
赠送鲜花
墨清扬
等 级:
蝙蝠侠
威 望:
1
帖 子:294
专家分:817
注 册:2011-10-4
第
3
楼
收藏
得分:0
回复 2楼 beyondyf
不是那样,首先要判断用户有没有输入,有输入的话要把用户的输入全部读取,不能遗漏,也不能多读(比如用户只输入了两个,你认为有三个,那就会一直等)
版主的那个方法也可以解决这个问题,但是要写很多代码,不方便维护,因为输入的数据可能有很多种,差不多是自己再写一个scanf了,除非sscanf可以让指针后移,那就可以判断有没有读完。可能是我的经验不足,没想到好一点的方法?
酱油实习生
2012-04-09 21:13
举报帖子
使用道具
赠送鲜花
beyondyf
等 级:
贵宾
威 望:
103
帖 子:3282
专家分:12654
注 册:2008-1-21
第
4
楼
收藏
得分:8
我还是不明白你的想法。用正则表达式解析字符串很方便的。如果是windows程序可以应用它的消息机制,比如在change事件里处理等等。
这都得具体问题具体分析,可能你不太愿意透露过多你的设计方案,这样确实不好给你更适合的建议。
重剑无锋,大巧不工
2012-04-09 22:27
举报帖子
使用道具
赠送鲜花
小鱼儿c
等 级:
贵宾
威 望:
14
帖 子:852
专家分:1317
注 册:2011-4-1
第
5
楼
收藏
得分:0
这个问题,你还是没有表达清楚!
用一个标志,来暂停线程!当一定条件恢复线程!
你还是把你具体说清楚!
用心做一件事情就这么简单
2012-04-10 10:52
举报帖子
使用道具
赠送鲜花
墨清扬
等 级:
蝙蝠侠
威 望:
1
帖 子:294
专家分:817
注 册:2011-10-4
第
6
楼
收藏
得分:0
好吧,我试一下能不能说明白……
有一个程序是多线程的,用户在使用的时候会输入几组的数字。过一段时间程序就要接收一次用户的输入。如果用户每次输入端数字个数都是固定的就可以直接用scanf来读取,但是如果不确定,那么就要保证一次读取完,不多也不少。比如用户输入了3个,我不能只读两个;如果我用scanf读取四个的话,虽然都三个读进了,但是scanf还要等用户再输入一个才返回,这样也不行。
偶然间看到kbhit()这样的函数,因此就想有没有一个读取函数,读取时先检查缓冲区,有数据就读取,没有就返回,不像scanf要等用户输入一个。
这个要求应该可以用其他的方法实现,比如读取前自己检查缓冲区等等。但是我想知道不用这种办法和正则表达式能不能解决,毕竟创新思维和视野很重要。
麻烦啦
酱油实习生
2012-04-10 18:51
举报帖子
使用道具
赠送鲜花
小鱼儿c
等 级:
贵宾
威 望:
14
帖 子:852
专家分:1317
注 册:2011-4-1
第
7
楼
收藏
得分:5
其实你这个要求和kbhit() 函数没有关系。
你只要加一个特特殊符号做为你输入的终止符就可以了。
假设你读未知的字符数是来输出的(假设 都是一样的)
但你满足字符结束的标志的时候你就处理这几个字符,然后把这些字符从这个缓冲取出来(里面其实有一个一个问题你,你正好改写缓冲系统
正在写字符。情况非常小,最好设2个缓冲最好(但也不是很好)这个我想按照我们的控制台的读入写出的缓冲一样的方式是可以的。
你可以再想想吧,但用互斥不知道好不好。。)
我的现在想法就这么多。
用心做一件事情就这么简单
2012-04-11 18:21
举报帖子
使用道具
赠送鲜花
小鱼儿c
等 级:
贵宾
威 望:
14
帖 子:852
专家分:1317
注 册:2011-4-1
第
8
楼
收藏
得分:0
其实发现我想多了,
你把scantf 和处理函数放在一起就不会出现那种正好在读和写的冲突了。
用心做一件事情就这么简单
2012-04-12 07:56
举报帖子
使用道具
赠送鲜花
墨清扬
等 级:
蝙蝠侠
威 望:
1
帖 子:294
专家分:817
注 册:2011-10-4
第
9
楼
收藏
得分:0
回复 8楼 小鱼儿c
特殊字符?可是我不想这样要求使用者……
酱油实习生
2012-04-13 19:46
举报帖子
使用道具
赠送鲜花
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
10
楼
收藏
得分:0
都没搞明白你的目的是什么、想做到怎样的效果。
授人以渔,不授人以鱼。
2012-04-13 21:50
举报帖子
使用道具
赠送鲜花
16
1/2页
1
2
快速回复:
有没有像kbhit()的非阻塞函数
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014191 second(s), 7 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved