2016-12-07 17 views
1

我是C++/CLI的新手,我來自使用嵌入式C++的背景。我創建了一個溫度控制塊,可以與PC進行通信以設置/讀取溫度。如何獲取Timer Tick事件以中斷另一個函數C++/CLI

我正在嘗試創建一個循環不同溫度的程序,並以1秒爲間隔讀取讀數。我使用了一個「Forms Timer」,它應該每秒觸發一次,並創建一個類似於嵌入式C中的「事件」,以便「中斷」我的BtnTestTemp_Click()函數。

private: System::Void LogTempTimer_Tick(System::Object^ sender, System::EventArgs^ e) { 
    GetTemp_Click(sender, e); 
    tempreadingNb++; 
} 

private: System::Void BtnTestTemp_Click(System::Object^ sender, System::EventArgs^ e) { 
    //SET TO ROOM TEMP 
    this->TempSet->Text = "2500"; 
    SetTemp_Click(sender, e); 
    //WAIT UNTIL 2500 +/- 1 
    while ((currenttemp > 2600)||(currenttemp < 2400)) {} 
} 

當不在我BtnTestTemp_Click()函數,定時器工作正常,我可以看到它調用LogTempTimer_Tick()事件的每一秒。然而,坐在我while循環時:

while ((currenttemp > 2600)||(currenttemp < 2400)) {} 

的LogTempTimer_Tick()函數,不會被調用當前的溫度永遠不會更新。

爲什麼在其他功能期間不觸發該事件?我該怎麼做才能讓它「中斷」其他功能?

謝謝。

回答

0

該類型的計時器是針對單線程應用程序制定的。 IE中按鈕點擊當前正在執行的線程是用來執行計時器滴答的線程。所以它不能執行該事件,直到其他事件完成。

查看System.Timers中的定時器,瞭解可用於多線程環境的東西

相關問題