Асинхронное и многопоточное программирование в MQL - страница 40

 
Алексей Тарабанов:

Два, или двадцать два потока могут быть как синхронными, так и асинхронными. Один поток может включать как синхронные, так и асинхронные операции. Вы сами указали, как. Параллельные включать не умеет. 

Ну, да. Нельзя включить параллельные вычисления в одном потоке. Синхронные и асинхронные операции можно выполнять в одном или в нескольких потоках. Только, однопоточная асинхронность по сути, оптимизированная последовательность действий, уступающая в стабильности многопоточной асинхронности. Если один поток даст сбой, система продолжит функционировать, а операции остановленного процесса можно расфосовать по остальным, сохранив работоспособность. А если поток один - системе при сбое капут.)

Случайное деление на ноль в одном потоке и все.
 

Пример: в 1 потоке выполняется синхронная функция, ожидающая данные из 2, 3 и 4 потоков, а результатов ее выполнения ожидают функции, распределенные в 5, 6, 7 и 8 потоках. 

Все дружно стоим и ждем результата. А теперь - внимание: что, если синхронная функция ждет данные из своего потока? И, не дай бог, эти данные зависят от ее результата? 

 
Реter Konow:

Случайное деление на ноль в одном потоке и все.

Нет не все.

 
Алексей Тарабанов:

Пример: в 1 потоке выполняется синхронная функция, ожидающая данные из 2, 3 и 4 потоков, а результатов ее выполнения ожидают функции, распределенные в 5, 6, 7 и 8 потоках. 

Все дружно стоим и ждем результата. А теперь - внимание: что, если синхронная функция ждет данные из своего потока? И, не дай бог, эти данные зависят от ее результата? 

Ладно, отвечу сам: 

Canvas начнет моргать. 

 
Koldun Zloy:

Перевожу, то что Вам уже ответил представитель компании разработчиков МТ:

Создавать потоки из MQL нельзя. Даже при помощи WinAPI.

Вы можете это сделать, только написав свою DLL.


Можно, в MQL5\Include\WinAPI\processthreadsapi.mqh есть обертки
HANDLE  CreateThread(PVOID thread_attributes,ulong stack_size,PVOID start_address,PVOID parameter,uint creation_flags,uint &thread_id);

Вот только что дальше с тредами делать через MQL? Поэтому и написали, что надо делать DLL и там с ними работать.


 

Алексей Тарабанов:

Пример: в 1 потоке выполняется синхронная функция, ожидающая данные из 2, 3 и 4 потоков, а результатов ее выполнения ожидают функции, распределенные в 5, 6, 7 и 8 потоках. 

Все дружно стоим и ждем результата. А теперь - внимание: что, если синхронная функция ждет данные из своего потока? И, не дай бог, эти данные зависят от ее результата? 

Алексей Тарабанов:

Ладно, отвечу сам: 

Canvas начнет моргать. 

Выделенное не имеет смыслового значения.

Насчет других тредов, пока данные не готовы, будет ждать. Моргать ничего не будет.

Причина обращения: