This article is about computer interrupts. For the study of the effect of disruptions on job performance, see Interruption science. For other uses, see Interruption. In system programming, an interrupt is a signal to the processor emitted by hardware or software indicating an event that needs immediate attention. An interrupt alerts the...
// Пример хранения/обмена данными через Ресурсы внутри Терминала#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166voidOnStart()
{
const RESOURCEDATA<int> ResourceINT("::int"); // Ресурс для обмена int-ами. const - как доказательство, что ничего не пишется в объект классаint ArrayINT[] = {1, 2, 3};
int Num = 5;
ResourceINT = ArrayINT; // Ресурс хранит массив.
ResourceINT += Num; // Добавили в ресурс еще значение.
ResourceINT += ArrayINT; // Добавили массив.int ArrayINT2[];
ResourceINT.Get(ArrayINT2); // Считали данные из ресурса.ArrayPrint(ArrayINT2); // Вывели: 1 2 3 5 1 2 3
ResourceINT.Free(); // Удалили данные из ресурсаPrint(ResourceINT.Get(ArrayINT2)); // Убедились, что данных нет: 0const RESOURCEDATA<MqlTick> ResourceTicks("::Ticks"); // Ресурс для обмена тиками. const - как доказательство, что ничего не пишется в объект классаMqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick))
for (int i = 0; i < 3; i++)
ResourceTicks += Tick; // Добавили в ресурс тикиMqlTick Ticks[];
ResourceTicks.Get(Ticks); // Считали данные из ресурса.ArrayPrint(Ticks); // Вывели.// Это полное имя ресурса для обращения из другой программыconststring NameOut = StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_PATH)) + 5) + "::Ticks";
Print(NameOut); // Вывели полное имя ресурса.const RESOURCEDATA<MqlTick> Resource(NameOut); // Ресурс для доступа к данным (read-only) из другой программыMqlTick TicksOut[];
Resource.Get(TicksOut); // Считали данные из ресурса.ArrayPrint(TicksOut); // Вывели.
Resource.Free(); // Не получится повлиять на данные read-only-ресурса.Print(_LastError); // ERR_INVALID_PARAMETER - Ошибочный параметр при вызове системной функции.
}
結果
はい、私のコンピュータでは約4ミリ秒かかるスリープの 内部作業を考慮に入れていません。
Sleepに代わる良い方法(精度を気にする人 : )として
0.995の精度を保証することはできませんが。自分のパソコン用に手に取りました。万人向けかもしれません。
正直、どういう意味なのか、MQL5のどこで遭遇できるのかさえもわかりません。
同期機能であっても、あらゆる場面でスパイクが発生する可能性があるということです。どうしようもないことなので、意識して気にしないようにすればいいのです。
https://en.wikipedia.org/wiki/Interruptプログラム間の情報伝達には、ファイルやグローバル変数のほかに、次のような方法があります。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
ライブラリ:TradeTransactions
fxsaber さん 2018.09.20 16:23
ファイルやグローバル変数とは別に、プログラム間で情報を やり取りする方法がある
1つの実行中の端末内のプログラムの話ですよね?
1つの実行端末内のプログラムの話ですよね?
そうです、だからグローバル変数 と書いてあるのです。
そして、端末間でもこの ような使い方をするようになりました。そうです、だからグローバル変数 と書いてあるのです。
そして、端末間でもこの 方法が使われるようになった。ええ、本当にかっこいいです!
SSDの代わりにRAMディスクを使用した非常にクールな発見です。
そうです、だからグローバル変数 と書いてあるのです。
端子と端子の間はこの ように使うようになりました。そんなuser32.dllを使った簡単なセミハッカー方式をずっと使っています。しかし、この方法ではティックの配列を渡すことは不可能です。
昔、MQL4をマスターしているときに発明したものです。もちろん、交換の合理的な構成という点では最短の解決策ではありませんが、速くてよく動く(たぶん既存のすべての解決策より速い)ので、もう頭を悩ませていないわけです。
しかも、この方法は、追加のアクションを必要としません。
ポイントは、Windows全体で、メインWindowsウィンドウの名前という文字列型の共通変数があることです。すべての人が変えることができ、すべての人が見ることができる。
そんな簡単な半ハッカー方式で、user32.dllを使った方法をずっと使っています。しかし、この方法ではティックアレイを転送することはできません。
dll経由であれば、すべてのデータ型に対応するユニバーサルソリューションが あります。
しかし、高速です(おそらく既存のすべてのソリューションよりも高速です)。
まあ、行き過ぎですね)まず、メッセージキューを経由します。次に、追加でコンバージョン(前後変換)をする必要があります。それに、検証も行われているんですよ。
ちなみに、構造体の大き さは明示的に指定しないほうがいい。そのためのsizeofです。
dll経由であれば、すべてのデータ型に対応するユニバーサルソリューションが あります。
議論しているわけではありません。あなたのソリューションは、本当はもっと普遍的なものなのです。
しかし、個人的には、電流のカチカチ伝達のための端子間ブリッジがあればいいと思っています。
私のバリエーションは、原始的であるために理解しやすく、動作が少し速いだけです。皆さんのものと比較して測定したところ、1.5~2倍速くなっていました。1ティックの読み取り時間は、90マイクロ秒と160マイクロ秒の比較。