找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2979|回复: 0
打印 上一主题 下一主题
收起左侧

死循环问题求解记录

[复制链接]
跳转到指定楼层
楼主
ID:3721 发表于 2015-1-5 15:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问: 16:00:51

        timer = new QTimer(this);
        timerFlag =false;
        connect(timer,SIGNAL(timeout()),this,SLOT(timerDone()));
        timer->start(1000);
        while(1)
        {
            if(timerFlag == true)break;//超时退出
          }
问: 16:01:20
void ConnectDialog::timerDone()//超时处理函数
{
    timerFlag=true;
    disconnect(timer,SIGNAL(timeout()),this,SLOT(timerDone()));
    delete timer;
}
问: 16:01:45
这样写,为什么是死循环。
橙  子<lizheng310@vip.qq.com> 16:03:10
处理函数会执行吗
问: 16:04:00
单片机程序写多了,想当然了。
问: 16:04:25
把槽函数当单片机中断玩了。
Howe(423286697) 16:05:19
如果定时器只用一次的,怎么不用QTimer::singleShot 呢
问: 16:05:28
不知道这里都是用什么处理办法,是不是要用多线程,还是什么?
问: 16:06:34
是打开只用一次。
橙  子<lizheng310@vip.qq.com> 16:07:37
用exec()超时后exit()
A: 16:08:40
不能用定时器触发槽吗?
橙  子<lizheng310@vip.qq.com> 16:09:41
可以
橙  子<lizheng310@vip.qq.com> 16:10:31
你把while删了 写上 this->exec(),试试
橙  子<lizheng310@vip.qq.com> 16:11:22
在槽里输出一下 看执行了没
A: 16:11:50
你是想定时?这样写?
A: 16:11:54
晕你了  
A: 16:12:14
延时多少  是吧?
问: 16:14:30
不是写延时,是遍历系统可用串口并打开串口,向串口发送连接命令,在1秒内接收到电路有效回应,就记录下设备的相关信息。
A: 16:15:42
设置超时吧  意思是
问: 16:15:59
嗯,是的。
A: 16:16:35
其实槽函数就相当于中断  是会返回的
A: 16:17:35
读串口的槽函数 设个标志位
A: 16:18:46
在延时函数里面查询就是了  一秒没查询到置位  那就是超时了啊  返回false
问: 16:19:02
那我的写法就应该没错的,while(1){if(timeflag==1)break;}超时的槽函数把这个标志位置1,但事实并不是这样的。
A: 16:19:26
为什么这样写?
问: 16:19:51
QByteArray temp;
    temp = myCom->readAll();

    if(!((temp.isEmpty())|(temp.isNull())))
    {
        reapt.append(QString(temp));
        qDebug()<<reapt<<endl;

        if((!reapt.startsWith("Ok"))&&(reapt.size()>=2))reapt.clear();
        if(reapt.endsWith('\n'))endFlag = true;
    }
A: 16:19:53
你没运行超时的函数  如何查询?
A: 16:20:55
你没运行超时的函数  如何查询?
问: 16:20:55
看来,我又掉进死胡同了。
A: 16:21:19
假如没有返回  那你不是死循环了?
A: 16:21:46
我也是做单片机的  
A: 16:21:50
也没你这样做
静心(501809514) 16:22:03
呵呵
问: 16:22:06
qtimer启动后,超时不会自动发送timeout信号吗?
A: 16:22:29
那我就不知道了
A: 16:23:38
我的超时函数
A: 16:23:39
bool Widget::sleep(unsigned int msec)
{
    QTime dieTime = QTime::currentTime().addMSecs(msec);
    while( QTime::currentTime() < dieTime )
    {
        QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
        if(lock_flag)
        {
            lock_flag = false;
            return true;
        }
    }
    return false;
}
问: 16:27:33
嗯,好的,晚上我回去,参考你的,在多看看资料。谢谢。
A: 16:27:51
我是个新手  不一定行
A: 16:28:07
本地图片,请重新上传
问: 16:29:13
谦虚了,放心,肯定会多查多看,不会只盯着你的代码研究。
A: 16:29:14
你是读书郎?
问: 16:29:46
不是,我毕业两三年了,qt是去年自己自学的。
A: 16:30:22
我也是过年才做了下Qt  发现只会用  但是看不懂
B: 16:30:24
仟門现在用QT来做什么?
A: 16:30:36
所以目前在学习C++
问: 16:30:47
只是想做一个串口的上位机,和自己的电路通信。
B: 16:31:14
仟門
现在做什么工作?
问: 16:31:42
本地图片,请重新上传楼上你打听那么多,干嘛?
B: 16:32:17
本地图片,请重新上传看看都是搞些什么的,多向你们学习学习
橙  子<lizheng310@vip.qq.com> 16:32:35
本地图片,请重新上传让我郁闷的是一直再close_wait 就是不关闭
问: 16:33:10
我做八位单片机开发,有时间帮忙把楼上问题解决一下。
问: 16:33:35
我心有余,力不足本地图片,请重新上传本地图片,请重新上传
A: 16:35:28
我是M0
A: 16:35:47
你什么型号?
问: 16:36:23
我比你低级,elan,stc,avr,pic。
A: 16:36:54
elan不知道是什么
问: 16:37:40
台系单片机,elan holtek
问: 16:37:55
都白菜的价格。
问: 16:38:13
一元不到一片。
A: 16:38:36
。。。
问: 16:39:06
m3还知道,m0没研究过。
A: 16:39:24
你会写makefile
问: 16:39:31
nxp的?
A: 16:39:35
M几都差不多
A: 16:39:46
是的

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表