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