主题 : 【求助】slot中函数的循环问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 44059
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
综合积分: 6 分
注册时间: 2011-04-21
最后登录: 2011-05-26
楼主  发表于: 2011-05-18 16:10

 【求助】slot中函数的循环问题

int sphygmus_flag = 1; //全局变量

WidgetMeasure::WidgetMeasure(QWidget *parent, const char *name): QWidget(parent,name)
{
    …
    connect(pushbutton_sphygmus_start, SIGNAL(clicked()), this, SLOT(sphygmus_measure_start()));
    …




    connect(pushbutton_sphygmus_stop, SIGNAL(clicked()), this, SLOT(sphygmus_measure_stop()));
    …
}
void WidgetMeasure::sphygmus_measure_start()
{
    sphygmus_flag = 1;
    char sphygmus_value[2] = {0};
    int interval_time = 0;
    int sphygmus_number = 0;
    QString str_sphygmus_value;
    QString str_sphygmus_num;

    //while(sphygmus_flag)    //当使用这个循环时,下面的程序完全无法执行,图形界面直接卡死。???PS:不使用这个循环单次运行一切正常。
    {
        do
        {
            if( read(sphygmus_fd,sphygmus_value,1) != 1)
            {
                label_sphygmus_time->setText("read sphygmus data error");
            }
        }while(sphygmus_value[1]<25 || sphygmus_value[1]>74);
    
        interval_time = (int)(((unsigned int)sphygmus_value[0] | ((unsigned int)sphygmus_value[1] << 8))*0.079 + 0.5);
        str_sphygmus_value = QString("%1").arg(interval_time);
        label_sphygmus_time->setText("Interval Time: " + str_sphygmus_value + " ms");

        sphygmus_number = (int)(60000 / interval_time + 0.5);
        str_sphygmus_num = QString("%1").arg(sphygmus_number);
        label_sphygmus_num->setText("Sphygmus Number: " + str_sphygmus_num + " / min");
    }
}

void WidgetMeasure::sphygmus_measure_stop()
{
    sphygmus_flag = 0;
}
年轻没有失败!