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

 

有好说法的前辈,希望不吝赐教,谢谢,

耶稣爱你


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM