一定時間ごとにある関数を実行させるというプログラムを書こうと思いsettimerというものにたどり着きました。
いろいろなサイトを見たのですが使い方がよくわからずです
お願い致します...
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
SetTimerはWindowsのメッセージループを利用する場合のみ利用できます。もし、Windowsのコンソールや、他の環境でタイマー機能を実現したい場合は、標準C++ではスレッドを利用することが考えられます。
C++
1#include <atomic> 2#include <thread> 3#include <chrono> 4 5auto alive = std::atomic_bool(true); 6auto th1 = std::thread( [&alive]{ 7 const std::chrono::milliseconds interval(1000); 8 while( alive.load() ){ 9 auto start = std::chrono::system_clock::now(); 10 call(); 11 auto end = std::chrono::system_clock::now(); 12 auto waste = end - start; 13 if( waste < interval ){ 14 std::this_thread::sleep_for( interval - waste ); 15 } 16 } 17} ); 18th1.detach(); 19 20alive.store(false); // stop calling
投稿2016/02/16 10:28
編集2016/03/02 14:41総合スコア1720
0
VC++の場合の使い方です。
下記が参考ソースになります。
CXxxxx::MainFunc()//タイマーをセットする関数
{
・・・・・・・・略・・・・・・・・
SetTimer(1, 100, NULL); // タイマを設定する
// 引数の意味(タイマーID、呼び出す間隔(ms), NULLでOK)
・・・・・・・・略・・・・・・・・・
}
// タイマーが呼ばれた時の処理を記述する
void CXxxxx::OnTimer(UINT nIDEvent)
{
if (nIDEvent ==1) { // 1番目のタイマーの時
//ここに実行したい処理を記述して下さい
}
CXxxxx::OnTimer(nIDEvent);
}
CXxxxx::StopTimer()//必要なくなったらタイマーを止める!!!
{
KillTimer(1); // 1番目のタイマーを止める
}
こんな感じでしょうか。
投稿2016/02/16 08:59
総合スコア38
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/16 10:59
2016/02/16 12:19
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。