问题描述:
我的工程使用UDP进行通信,初始程序运行正常。运行一段时间后,udp正常接收数据,并且成功将收到的数据发出信号,但是此时不执行槽函数。 并且界面出现卡死现象。
猜想可能:
线程阻塞、对象异常销毁(总感觉没有遇到过,后边发觉确实想多了)
后续解决:
1.使用数据库连接池的时候只是增加db,每次使用完毕未将db置为空闲状态,导致各个模块获取db并且db数据量大于等于最大连接数的时候,获取db的时候产生死循环等待。
2.多个模块共用一个线程,某几个模块耗时过长,导致接收数据槽函数的对象所在线程死锁。
3.某个模块使用数据库查询数据的时候使用while循环,每次循环将获取的数据不断发送前端,而我忘记对query进行break,导致后台不断向界面发送数据,界面卡死。(界面卡死的原因)
伪代码:
{ //改用数据库使用
db = getDb(); //获取db
use... db; //使用db
removeDb(&db);//移除db或者将db置为空闲状态。
}
{ //耗时线程单独开线程
Model modeRcv; //数据接收槽函数所在线程
Model_ modeOther;
//数据接收槽函数所在模块单独开辟一个线程
modeRcv.moveToThread(&thread1);
modeOther.moveToThread(&thread2);
}