Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Перевожу, то что Вам уже ответил представитель компании разработчиков МТ:
Создавать потоки из MQL нельзя. Даже при помощи WinAPI.
Вы можете это сделать, только написав свою DLL.
WinAPI и использует стандартные dll !
kernel32.dll
user32.dll
и т.д.
Предполагалась многопоточная работа с функциями WinAPI, а не с функциями mql
Но то, что нельзя многопоточно работать с mql функциями, да, печально.
WinAPI и использует стандартные dll !
kernel32.dll
user32.dll
хм, по моему с точностью до наоборот: WinAPI реализовано в виде динамических библиотек kernel32.dll , user32.dll...
по моему Вы ни разу не пробовали написать на чистом С++ обычное Windows окно с текстом "Hello Word!" - примеров в сети "вагон с тележкой", напишете свое первое "Hello Word!" - многое само собой прояснится ;)
хм, по моему с точностью до наоборот: WinAPI реализовано в виде динамических библиотек kernel32.dll , user32.dll...
по моему Вы ни разу не пробовали написать на чистом С++ обычное Windows окно с текстом "Hello Word!" - примеров в сети "вагон с тележкой", напишете свое первое "Hello Word!" - многое само собой прояснится ;)
Стандартные имелось ввиду, что это стандартные Windows dll, стандартные не означает что они статические .lib
Игорь, вы что то не в ту степь...
Причём тут "Hello Word!" когда вопрос про инициализацию dll, и вызов из неё функции в своём потоке !
Для примера:
Есть WinAPI функция MessageBoxW();
Её нужно вызвать в своём потоке.
Для это необходимо проинициализировать саму dll и экспортируемую функцию, приведите пример как это правильно сделать?
Затем после инициализации, вызываем MessageBoxW(); с помощью CreateThread();
После выполнения функции, освобождаем ресурс и закрываем поток.
Приведите пример как это сделать правильно в mql ?
Стандартные имелось ввиду, что это стандартные Windows dll, стандартные не означает что они статические .lib
Игорь, вы что то не в ту степь...
Причём тут "Hello Word!" когда вопрос про инициализацию dll, и вызов из неё функции в своём потоке !
Для примера:
Есть WinAPI функция MessageBoxW();
Её нужно вызвать в своём потоке.
Для это необходимо проинициализировать саму dll и экспортируемую функцию, приведите пример как это правильно сделать?
Затем после инициализации, вызываем MessageBoxW(); с помощью CreateThread();
После выполнения функции, освобождаем ресурс и закрываем поток.
Приведите пример как это сделать правильно в mql ?
это Вы не в ту степь, Вам же ответили - пишите dll (в которой Вы должны выделить память и зарегистрировать новый поток! - затем при выходе все аккуратно уничтожить!) и вызывайте ее из MQL
где в Вашем примере выделение памяти и регистрация процесса ? то, что Вы вызвали MessageBox - это означает, лишь, что MQL программа предоставила свои ресурсы, но не создала отдельный поток, даже проверять не хочу, но при вызове MessageBox, у Вас должен подвиснуть терминал
это Вы не в ту степь, Вам же ответили - пишите dll и вызывайте ее из MQL
где в Вашем примере выделение памяти и регистрация процесса ? то, что Вы вызвали MessageBox - это означает, лишь, что MQL программа предоставила свои ресурсы, но не создала отдельный поток, даже проверять не хочу, но при вызове MessageBox, у Вас должен подвиснуть терминал
Игорь, функции по инициализации dll я привёл для примера, чтоб понимали о чём речь, но как это правильно делать на mql, я не в в курсе, чистый C++ может ввести в заблуждение.
Да и сама особенность языка mql может запудрить мозги. По этому и обратился за помощью на форум, а не в гугл.
Да зачем мне писать dll, когда WinAPI и так построен на dll, и вызываемые функции уже находятся к примеру в user32.dll
Так я и создал тему, чтобы разобраться в этом вопросе как это правильно делать в mql, а вы мне где выделение памяти и регистрация процесса )).
Покажите правильный пример как это делается в mql?
Или направьте на хороший гайд.
Игорь, функции по инициализации dll я привёл для примера, чтоб понимали о чём речь, но как это правильно делать на mql, я не в в курсе, чистый C++ может ввести в заблуждение.
Да и сама особенность языка mql может запудрить мозги. По этому и обратился за помощью на форум, а не в гугл.
Да зачем мне писать dll, когда WinAPI и так построен на dll, и вызываемые функции уже находятся к примеру в user32.dll
Так я и создал тему, чтобы разобраться в этом вопросе как это правильно делать в mql, а вы мне где выделение памяти и регистрация процесса )).
Покажите правильный пример как это делается в mql?
Или направьте на хороший гайд.
Не создадите поток из программы mql, даже используя WinAPI.
Игорь, функции по инициализации dll я привёл для примера, чтоб понимали о чём речь, но как это правильно делать на mql, я не в в курсе, чистый C++ может ввести в заблуждение.
Да и сама особенность языка mql может запудрить мозги. По этому и обратился за помощью на форум, а не в гугл.
Да зачем мне писать dll, когда WinAPI и так построен на dll, и вызываемые функции уже находятся к примеру в user32.dll
Так я и создал тему, чтобы разобраться в этом вопросе как это правильно делать в mql, а вы мне где выделение памяти и регистрация процесса )).
Покажите правильный пример как это делается в mql?
Или направьте на хороший гайд.
еще раз - это не делается средствами MQL , Вы решаете задачу с другой стороны - со стороны хвоста. а не с головы!
пишете dll - вызываете ее из MQL и в dll передаете данные и если нужно не останавливать MQL-программу (сложные вычисления), то в dll создаете новый поток и в этом потоке обрабатываете данные
как написать dll - поиском по форуму "dll" статей 20 будет точно
гайдов нет, но на чем Вы будете писать dll - на том ресурсе и ищите решения как создавать потоки и пр.
Не создадите поток из программы mql, даже используя WinAPI.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Асинхронное и многопоточное программирование в MQL
MetaQuotes Software Corp., 2019.07.24 16:31
Из DLL нельзя вызывать MQL функции.
Но можно запускать множественные потоки через вызовы DLL, чтобы они независимо от MQL5 работали в своем окружении.
Например, из MQL подготовили данные, разместили где-то или передали в DLL библиотеку, которая уже в свою очередь во множестве потоков отработает задачу и вернет результат через дополнительную функцию.
Вызов Windows API функций, и является вызовом из dll, значит для Windows API функций можно создавать потоки с помощью CreateThread();
Не зря же CreateThread(); портировали в стандартную mql библиотеку.
Вызов Windows API функций, и является вызовом из dll, значит для Windows API функций можно создавать потоки с помощью CreateThread();
Не зря же CreateThread(); портировали в стандартную mql библиотеку.
никто ничего не портировал, то что Вы видите в инклуднике это лишь сигнатуры функций
чтобы создать поток нужно тело функции - вот то тело которое будет крутиться в потоке!
чтобы зарегистрировать поток в Виндовс нужно заполнить структуру:
видите lpStartAddress - вот это и есть адрес точки входа в функцию которая будет работать в потоке, про выделение памяти промолчим
чтобы решить это задачу, Вам нужно найти возможность получить средствами MQL адрес MyFunc() - в памяти, а его нет - нет от слова нигде, ну совсем... нет!
не знаю как еще доходчивее "на пальцах" объяснить проблему... которой нет по сути )))