2016-12-07 5 views
1

私はC++/CLIの新機能です。埋め込みC++を使用する背景にあります。私は温度を設定/読み取るためにPCと通信できる温度制御ブロックを作成しました。Timer Tickイベントを取得して別の関数を中断する方法C++/CLI

私は、異なる温度を繰り返し、1秒間隔で読み取り値を取得するプログラムを作成しようとしています。すべての秒をTickし、埋め込まれたCのようなBtnTestTemp_Click()関数を "中断"する "イベント"を作成する "Forms Timer"を使用しました。

私BtnTestTemp_Click()関数で、タイマーが正常に動作し、私はそれが毎秒LogTempTimer_Tick()イベントを呼び出して見ることができない
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)) {} 
} 

。しかし、私のwhileループに座ったとき:

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

LogTempTimer_Tick()関数が呼び出されることはありませんし、現在の温度が更新されることはありません。

他の機能でイベントが発生しないのはなぜですか?他の機能を「中断」させるためには、どうしたらいいですか?

ありがとうございました。

答えて

0

この種類のタイマーは、シングルスレッドアプリケーション用に作成されています。 IEは、ボタンクリックで現在実行されているのと同じスレッドが、タイマーティックを実行するために使用されるものです。したがって、他のイベントが完了するまで、そのイベントを実行することはできません。

System.Timersのタイマーで、マルチスレッド環境で使用できるものを確認してください。

関連する問題