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

 

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

posted @ 2017-03-25 16:47  工控之家-Shrek  阅读(2554)  评论(1编辑  收藏  举报