线程的循环问题
本人linux小白新手
最近在做一个关于视频传输的项目
希望能完成一个从摄像头采集,UDP协议传输,QT显示这样的功能。
但是卡在了发送接受图片这
我的想法是用线程
发送端循环发送:
void func()
{
while(function)
{
catch(); //抓图并发送的函数
usleep(30); //等待30us然后抓图
}
}
int shipin_close()
{
function = 0;
}
而接收端直接循环接收
但是这样的方法会导致视频很卡,后来是问老师,他回答线程最好不要加死循环,我想问一下各位大神,可否用定时器做?用定时器的话,不也要加循环吗?
我需要实现按一个键开始抓图发送,再按另一个键停止,请问有没有好的方案?
可能表达有点问题,见谅,大家就将就着看看吧,谢谢了 线程?Qt??循环
[解决办法]
根据你的应用,移使用信号量的方法来唤醒线程抓图发送,
当你按键要发送时,发送一个信号量,然后,线程收到信号量,启动发送。这样就不需要一直死循环处理了。
接收端也可以用信号量的方式接收,(当接收到图像时,向接收线程发送一个信号量)
使用定时器轮询,和循环轮询,这样会很耗cpu时间,实际上大部分时间,cpu都在做无用功,因为你的按键是间隙性触发的。
如果你想要采样循环处理的方式,最好将sleep时间设为200ms,这样应该不会感觉卡,