最近在使用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。