Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ого, значит все вышло? Круто!
Тогда лучше будет если сделать более развернутый пример, чтобы менее опытным было проще сориентироваться. Я так думаю!
Этот код рекомендую использовать только в экспертах и скриптах!
{
//---создадим таймер с периодичностью 1 микросекунда
EventSetMillisecondTimer(1);
return(INIT_SUCCEEDED);
}
void OnTimer()
{
//---укажем ограничение по времени, чтобы таймер давал возможность через каждые 1000 микросекунд
//---обрабатываться основным событиям, таким как: OnTick(), OnChartEvent(), OnOnDeinit(), ...
const ulong ToFinish = GetMicrosecondCount() + 1000;
while(!_StopFlag && GetMicrosecondCount() < ToFinish)
{
//---тут поместим наши функции, которые должны выполняться "параллельно" и обладать наивысшим приоритетом
ParallelFunc1();
ParallelFunc2();
//...
}
}
void OnDeinit(const int reason)
{
//---удалим таймер
EventKillTimer();
}
//+------------------------------------------------------------------+
//| "параллельные" функции с наивысшим приоритетом |
//+------------------------------------------------------------------+
void ParallelFunc1()
{
}
bool ParallelFunc2()
{
return true;
}
Тогда лучше будет если сделать более развернутый пример, чтобы менее опытным было проще сориентироваться. Я так думаю!
Этот код рекомендую использовать только в экспертах и скриптах!
Это не удивительно человеческий глаз обрабатывает в среднем 24 кадра в секунду, что 1000000/24 ~ 42000 мкс. Верно?
Нужно еще учесть задержки на переключения между событиями и на выход из таймера (таймаут лишь грубо отсекает время) и прочие мелочи, поэтому смело можно: 42000/3=14000 мкс.
А если еще учесть, что в среднем алгоритмы внутри параллельных функций не такие уж быстрые, то и вовсе остается совсем ничего, т.е. 1000 мкс.
Вот, как-то так, я думаю :)
Вы, похоже, хотите распараллелить вычислительный поток? Тут единственный вариант: использовать таймер миллисекндный, цикл и таймаут для вычисления, чтобы все остальное тоже выполнялось:
{
EventSetMillisecondTimer(1);
return(INIT_SUCCEEDED);
}
void OnTimer()
{
ulong ToFinish = GetMicrosecondCount() + 1000;
while(!_StopFlag && GetMicrosecondCount() < ToFinish)
{
//Your code...
}
}
void OnDeinit(const int reason) {EventKillTimer();}
Да, в виндах интервал переключения потоков как раз 15-16 мс минимум, так что стандартный таймер с меньшим интервалом работать не будет. Может, в 10-ке и меньше сделали, не пробовал. А такой выход с циклом сработает. Кстати, в виндах можно мерять время с точностью до такта процессора, но надо писать DLL.
Это абсолютно ошибочное утверждение.
Это я у Рихтера вычитал. Возможно, в десятке по другому.
Вы же используете таймеры Windows или что-то свое?
Это я у Рихтера вычитал. Возможно, в десятке по другому.
Вы же используете таймеры Windows или что-то свое?
Да, в виндах интервал переключения потоков как раз 15-16 мс минимум, так что стандартный таймер с меньшим интервалом работать не будет. Может, в 10-ке и меньше сделали, не пробовал. А такой выход с циклом сработает. Кстати, в виндах можно мерять время с точностью до такта процессора, но надо писать DLL.
Это я у Рихтера вычитал. Возможно, в десятке по другому.
Вы же используете таймеры Windows или что-то свое?
Вы перепутали старое утверждение про базовую разрешающую способность функции GetTickCount() в 16 ms с квантом переключения потоков.
Это не имеет никакого отношения к квантам выделения cpu на каждый поток и времени переключения потоков.