最近一个运行了很久的Qt项目突然开始出现问题。
跟踪了好久发现Qtimer的remainingTime一直都是0。不会减到-1,也不会促发timeout信号。
最后研究一下发现QTimer使用windows句柄。QTimer::signalShot()这个静态函数会创建一个QTimer。而且创建者析构了,如果这个timer不停止,不会析构。也不会释放windows句柄。这样程序运行久了或者对象创建多了就会出现windows句柄不够用的情况。所以QTimer,慎用。
最近一个运行了很久的Qt项目突然开始出现问题。
跟踪了好久发现Qtimer的remainingTime一直都是0。不会减到-1,也不会促发timeout信号。
最后研究一下发现QTimer使用windows句柄。QTimer::signalShot()这个静态函数会创建一个QTimer。而且创建者析构了,如果这个timer不停止,不会析构。也不会释放windows句柄。这样程序运行久了或者对象创建多了就会出现windows句柄不够用的情况。所以QTimer,慎用。