EventKillTimer関数の働き・役割
EventKillTimer関数は既に設定されているタイマーを停止する役割を持っています。
EventKillTimer関数を使用することで、EventSetTimer関数等で生成したタイマーイベント(=プログラムが定期的に特定の時間間隔で動作を行うために発生するイベント)の発生を停止することができます。
特に、プログラムが終了する際には、設定されたタイマーが自動的に破棄される前に、EventKillTimer関数を呼び出してタイマーを明示的に停止することが推奨されています
従って、EventKillTimer関数は殆どの場合EventSetTimer関数及びOnTimer関数とワンセットで使われます
※EventSetTimer関数についての詳細は↓の記事をご参照ください
※OnTimer関数についての詳細は↓の記事をご参照ください
EventKillTimer関数の引数について
EventKillTimer関数は引数を取らず、呼び出すだけで関連付けられたタイマーイベントを停止します
関数の戻り値について
EventKillTimer関数には戻り値がありません(void型)
したがって、EventKillTimer関数を呼び出した結果として何かを受け取ることはありません
EventKillTimer関数を使う際の注意点
EventKillTimer関数は、EventSetTimer関数またはEventSetMillisecondTimer関数によって設定されたタイマーが存在する場合にのみ使用するべきです。
MQL5において、EventSetTimer関数やEventSetMillisecondTimer関数を用いてタイマーが設定されると、指定した間隔でOnTimerイベントが発生し続けます。
これにより、例えば定期的に市場データをチェックするといった操作が可能になります。EventKillTimer関数はこれらのタイマーを停止させる役割を持つため、タイマーが設定されていない状態でEventKillTimer関数を呼び出しても何の効果もありませんし、エラーが発生する可能性もあります。
また、EventKillTimer関数はプログラムのデストラクタやOnDeinit関数で呼び出すことが一般的です。
プログラムが終了する際には、それまでに使用していたリソースを適切に解放することが一般的なプログラミングの慣習となっています。
MQL5のコンテキストで言えば、OnInit関数で設定したタイマーは、プログラムがもはや必要としないか、終了する際にOnDeinit関数で停止させる必要があります。
これにより、不要なタイマーがシステム資源を消費し続けることを防ぎます。
いずれにしても、EventKillTimer関数を呼び出すタイミングは、タイマーを不要とする状況やプログラムの終了時など、明確にしておく必要があります
EventKillTimer関数を使ったサンプルコード
以下は、EventKillTimer関数を使用してタイマーを停止する簡単な例です。
// OnInit関数でタイマーを1分間隔で設定します
int OnInit() {
Comment(""); // コメントをクリア
EventSetTimer(60); // 60秒ごとにタイマーイベントを生成
return(INIT_SUCCEEDED);
}
// OnTimer関数でタイマーイベントが発生するたびに呼ばれます
void OnTimer() {
datetime serverTime = TimeCurrent(); // サーバーの現在時刻を取得
// サーバー時刻をコンソールに出力
Print("サーバーの現在時刻: ", TimeToString(serverTime, TIME_DATE|TIME_MINUTES));
}
// ファイルがチャートから削除される時に実行される関数
void OnDeinit(const int reason) {
EventKillTimer(); // タイマーを停止します
// チャートから削除されたことをユーザーに通知
if (reason == REASON_REMOVE) {
Comment("このエキスパートアドバイザーはチャートから削除されました。");
}
}
サンプルコードに使われた関数や文法要素の解説
- OnInit関数: エキスパートアドバイザーが初期化されるときに呼び出される関数です。
- EventSetTimer関数:指定された秒数ごとにタイマーイベントを生成するよう設定する関数です
- OnTimer関数: タイマーイベントが発生するたびに自動的に呼び出されるイベントハンドラーです。
※OnTimer関数についての詳細は↓の記事をご参照ください
- TimeCurrent関数: サーバーの最後に知られている時刻を取得します。
※TimeCurrent関数についての詳細は↓の記事をご参照ください
- TimeToString関数: dateTime型の時刻を文字列に変換します(タイプキャスト)
※TimeToString関数についての詳細は↓の記事をご参照ください
- OnDeinit関数:エキスパートアドバイザーやインジケータがチャートから削除されるとき、またはMetaTrader5が閉じるときに呼び出されます。
※OnDeinit関数についての詳細は↓の記事をご参照ください
・EventKillTimer関数:今回解説した、タイマーイベントを停止する関数です。
・Comment関数:チャートの左上にテキストを表示するために使用します。この例では、エキスパートアドバイザーがチャートから削除されたときにメッセージを表示しています。
※Comment関数についての詳細は↓の記事をご参照ください
<参照>
EventSetMillisecondTimer関数/OnTimer関数/GetLastError関数/OnInit関数/コンストラクタ/EventSetTimer関数/TimeCurrent関数/OnDeinit関数
※当サイトでは、プログラミング経験ゼロの方でも、プログラミングの基礎から学べる
をメインコンテンツとして展開しています。
第0回から、順を追って勉強していけばプログラミングの経験がなくてもMQL5を使って、MT5用のEAが作れるように書いています。最初は難しいと感じるかもしれませんが、繰り返し勉強していく事で自然とスキルが身についていくはずです。興味ある方は是非ご覧ください。