Qt 信号和槽机制压力测试-希望有前辈发表自己的看法
一直听担心一个问题,Qt中的信号如果触发的太快,槽这边都来不及执行完自己的任务,后面的信号又开始触发了,会出现什么现象,
以前在写单片机的中断服务函数时,单片机有中断嵌套,
下面是在qt creator下面写的一个测试例子:HANDLE h_thread_func_invoke_signal;bool g_b_flag_thread_running;
unsigned int count = 0; DWORD WINAPI thread_func_invoke_signal(LPVOID param) { MainWindow* parent = (MainWindow*)param; while (g_b_flag_thread_running) { count++; emit parent->signal_invoke_in_thread(count); ::Sleep(10); } }
//创建线程,并启动 void MainWindow::on_pushButton_4_clicked() {
g_b_flag_thread_running = true; h_thread_func_invoke_signal = ::CreateThread(NULL, NULL, thread_func_invoke_signal, this, 0, NULL); if (NULL == h_thread_func_invoke_signal) { QMessageBox::information(this, tr("error"), tr("create thread fiald"), QMessageBox::Ok);
g_b_flag_thread_running = false; return ; }
}
//绑定了信号的槽 void MainWindow::on_signal_invoke_in_thread(unsigned int count) { QElapsedTimer t; t.start(); while (t.elapsed() < 10) { QCoreApplication::processEvents(); } qDebug() << count << endl; }
//停止线程 void MainWindow::on_pushButton_5_clicked() { g_b_flag_thread_running = false;
}
运行结果:
11
10
9
8
7
6
5
4
3
2
1
13
12
16
16
15
14
20
19
18
22
还有出现相同的,顺序都乱乱的,
如果槽函数中的延时再大一些,应用程序就奔溃了,
如果去掉槽函数中延时,输出结果就没有问题,但是怎么可能没有逻辑处理呢,所以需要谨慎使用,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
有好说法的前辈,希望不吝赐教,谢谢,