QT应用程序使用ctrl+c无法中止的问题原因及解决

最近在使用QT程序调用一个C库的时候发现应用使用ctrl+c组合键不能中止了,让我郁闷了老一阵。

具体使用情景是:

LED类有一个定时器指针和一个QThread指针,定时器10ms超时后调用一个槽。开启此定时器后将此定时器move到mPThread线程运行。

代码如下:

led.h

class LED : public QObject
{
    Q_OBJECT
public:
    LED();
    ~LED();
private slots:
    void slot_process();
private:
    QTimer *m_pTimer = nullptr;
    QThread *mPThread = nullptr;
};

led.cpp

LED::LED()
{
    m_pTimer = new QTimer;
    m_pTimer->setInterval(10);
    m_pTimer->setTimerType(Qt::CoarseTimer);
    m_pTimer->start();

    connect(m_pTimer,&QTimer::timeout,this,&LED::slot_process);
    mPThread = new QThread;
    m_pTimer->moveToThread(mPThread);
    mPThread->start();
}

现象

程序在运行时按下crtl+c组合键,程序正常运行不退出,按住crtl+c不放,程序有几率退出。

原因

今天在调试的时候打印了一下slot_process的执行时间,发现该方法执行大概耗时40ms😄,很明显阻塞了程序的正常运行

详细打印运行时间后发现,使用system()方法设置IO竟耗时20ms左右

解决

避免使用system()方法,使用QFIle操作IO设备,每次操作时间小于1ms。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值