この記事は2020年07月12日に投稿しました。
目次
リンク
1. はじめに
こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているC++/CLIでタイマーを使用する方法(その2)についてです。
2. C++/CLIでタイマーを使用する(その2)
C++/CLIでタイマーを使用するには、System::Threading::Timerクラスを使用します。
実装例
using namespace System; using namespace System::Threading; ref class Sample { private: int count; int maxCount; public: Sample() { count = 0; maxCount = 10; } /** * @brief 時間間隔ごとに呼び出されます。 * * @param [in] state 呼び出し元から渡される状態オブジェクト */ void TimerCallback(Object^ state) { // カウンタが最大値より小さい場合 if (count < maxCount) { // メッセージを出力します。 DateTime^ now = DateTime::Now; String^ time = now->ToString("HH:mm:ss"); Console::WriteLine(time + "[" + count + "] Hello world"); } // カウンタが最大値を超える場合 else { // 終了イベントを発行します。 AutoResetEvent^ autoResetEvent = (AutoResetEvent^)state; autoResetEvent->Set(); } // カウンタを更新します。 count++; } }; [STAThreadAttribute] int main() { // タイマーを生成し、開始します。 Sample^ sample = gcnew Sample(); TimerCallback^ timerCallback = gcnew TimerCallback(sample, &Sample::TimerCallback); AutoResetEvent^ state = gcnew AutoResetEvent(false); System::Threading::Timer^ timer = gcnew System::Threading::Timer(timerCallback, state, 0, 1000); // タイマーの終了イベント待ち。 state->WaitOne(); // タイマーを終了します。 WaitHandle^ waitHandle = gcnew EventWaitHandle(false, EventResetMode::AutoReset); timer->Dispose(waitHandle); return 0; }
実行結果
06:28:51[0] Hello world 06:28:52[1] Hello world 06:28:53[2] Hello world 06:28:54[3] Hello world 06:28:55[4] Hello world 06:28:56[5] Hello world 06:28:57[6] Hello world 06:28:58[7] Hello world 06:28:59[8] Hello world 06:29:00[9] Hello world
API Reference
3. おわりに
前回紹介した
と機能的にはほとんど同じようです。
ただ使い方が少し難しく感じます。
リンク
紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。
私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS [Bi-OS][Bi-OS]は高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリやウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。
また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688