当前位置: 技术问答>linux和unix
pthread很影响速度,为什么?着急呀....
来源: 互联网 发布时间:2015-09-24
本文导语: 我用pthread_create创建1个线程,线程里面的代码是while (1) { nRead = read(ttyS0... ), if (nRead > 0) ...},read 从串口读数据,已经设置为非阻塞,其他属性都用默认,if 从未进去过,就这样的循环就使主线程变的很慢,为什么?怎...
我用pthread_create创建1个线程,线程里面的代码是while (1) { nRead = read(ttyS0... ), if (nRead > 0) ...},read 从串口读数据,已经设置为非阻塞,其他属性都用默认,if 从未进去过,就这样的循环就使主线程变的很慢,为什么?怎么解决??????
|
设置为阻塞就好了
|
设置为非阻塞会马上返回,所以占用CPU多,就使主线程变的很慢。
|
设计为非阻塞,中间用select停顿一下
|
用select设置检测是否可读
然后再read
然后再read
|
但设为阻塞会把主线程都给挂起? 你应该用异步的方法来实现线程间通信。
|
select
poll
poll
|
同意楼上,但你的if从未进去过?是不是该检查一下是否有输入呢?你可以调试进入看看就知道了
|
都用多线程了,,还设为不阻塞,不是自己找麻烦吗??
在新线程时读取,有数据时向主线程发个信号量或或者事件就可以同步了啊。
在新线程时读取,有数据时向主线程发个信号量或或者事件就可以同步了啊。
|
线程不停的做read动作(不成功)
占用大量CPU时间
速度当然慢了
既然是在子线程中
设成阻塞超时比较好
如果在qt下的话
qthread类中有msleep
可以用qthread不阻塞+msleep
占用大量CPU时间
速度当然慢了
既然是在子线程中
设成阻塞超时比较好
如果在qt下的话
qthread类中有msleep
可以用qthread不阻塞+msleep
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。