Асинхронное и многопоточное программирование в MQL - страница 24
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я не учился на программиста, всё изучаю сам, по этому не пинайте меня зануду ))
Я тоже. У меня другая профессия. Программирование только инструмент, вроде молотка.)
Создание ДЛЛ для МКЛ - там абсолютно стандартная ДЛЛ, никаких особенностей. Остальное - чистый С++, или, если хотите, чистый C#.
Научить C++ или Шарпу просто не в моих силах, но литературы вагонами, любого уровня.
Есть статья на МКЛ о создании простенькой ДЛЛ, ничего не могу сказать о ее информативности. Да, и Гугл в помощь по запросу - С++ создание ДЛЛ.
Кстати, о точке входа и пр. В Visual Studio создается проект ДЛЛ, и все нужное именно ДЛЛ создается само, только руками не трогайте.) Ну, а функции взаимодействия, потоки и пр. - это уже только вы сами. Это С++, никаких таких особенностей связанных именно с ДЛЛ.
ЗЫ Лучший способ изучения чего либо - решение вами конкретной задачи. Это даже не мной придумано.)
Я тоже. У меня другая профессия. Программирование только инструмент, вроде молотка.)
Создание ДЛЛ для МКЛ - там абсолютно стандартная ДЛЛ, никаких особенностей. Остальное - чистый С++, или, если хотите, чистый C#.
Научить C++ или Шарпу просто не в моих силах, но литературы вагонами, любого уровня.
Есть статья на МКЛ о создании простенькой ДЛЛ, ничего не могу сказать о ее информативности. Да, и Гугл в помощь по запросу - С++ создание ДЛЛ.
Кстати, о точке входа и пр. В Visual Studio создается проект ДЛЛ, и все нужное именно ДЛЛ создается само, только руками не трогайте.) Ну, а функции взаимодействия, потоки и пр. - это уже только вы сами. Это С++, никаких таких особенностей связанных именно с ДЛЛ.
Да сами dll я писать могу, с пустой точкой входа ))
А вот инфы по точке входа не где нет, жесть просто, ни гугл не даёт, ни литературы подобной ((
У меня именно проблема с точкой входа, как вы пишите функции взаимодействия, инициализация, выделение памяти, потоки, деинициализация и пр.
Знаю что все это в свиче реализуется в точке входа и всё, тупик ))
А что именно искать для изучения даже не знаю.
Да сами dll я писать могу, с пустой точкой входа ))
А вот инфы по точке входа не где нет, жесть просто, ни гугл не даёт, ни литературы подобной ((
У меня именно проблема с точкой входа, как вы пишите функции взаимодействия, инициализация, выделение памяти, потоки, деинициализация и пр.
Знаю что все это в свиче реализуется в точке входа и всё, тупик ))
А что именно искать для изучения даже не знаю.
Вы полагаете, что я знаю что либо о точке входа? Не царское это дело.) В ДЛЛ всего одна уникальная функция определяющая это
Понимать это нет никакой необходимости.) В дальнейшем, в большинстве случаев, при написании и эксплуатации ДЛЛ это использовать нет никакой необходимости. Главное, руками это не трогать.)
Вы полагаете, что я знаю что либо о точке входа? Не царское это дело.) В ДЛЛ всего одна уникальная функция определяющая это
Понимать это нет никакой необходимости.) В дальнейшем, в большинстве случаев, при написании и эксплуатации ДЛЛ это использовать нет никакой необходимости. Главное, руками это не трогать.)
Да нет как раз её и нужно понимать, вы же написали сами последовательность действий, вот я и подумал что вы об этом знаете хорошо.
В этой точке входа как раз и производятся все действия, по инициализации функций, выделении памяти, создание потока, деинициализации и т.д.
Хотя бы что почитать на эту тему?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Асинхронное и многопоточное программирование в MQL
Yuriy Asaulenko, 2019.07.27 21:25
Создаете в ДЛЛ поток и передаете ему данные, отсоединяете поток и забываете о нем - он сам завершится выполнив свою задачу.
При отсоединении потока в ДЛЛ, поток терминала освобождается. Весь процесс занимает, полагаю, меньше миллисекунды.
Сужу по тому, что даже не отсоединяя поток, процесс записи в БД составляет 4-5 мс. Ну, а 60 тиков/с достаточно, чтобы не грустить об асинхронном вызове из терминала.
Да нет как раз её и нужно понимать, вы же написали сами последовательность действий, вот я и подумал что вы об этом знаете хорошо.
Хотя бы что почитать на эту тему?
Не надо ее понимать, модифицировать и пр. Создаете проект ДЛЛ в VS, DllMain() создается сама. Все приложения Windows автоматом это поддерживают.
Ваша задача, написать экспорт функции и, кроме них, любой, какой вам нужен, самый обычный код С++. Ваша ДЛЛ готова и будет работать.
ООП создано в первую очередь для того, чтобы применять объекты не имея представления о их внутреннем устройстве, чтобы вы могли сосредоточиться на решении именно своей задачи, а не на изучении всего и вся. Мы ездим на автомобиле, и можем не иметь представления о его электронике и устройстве двигателя. В случае с ДЛЛ все аналогично.
А функция DllMain(), которую я ранее привел, взята из реального проекта достаточно сложной ДЛЛ, которая выполняет свои задачи.
Не надо ее понимать, модифицировать и пр. Создаете проект ДЛЛ в VS, DllMain() создается сама. Все приложения Windows автоматом это поддерживают.
Ваша задача, написать экспорт функции и, кроме них, любой, какой вам нужен, самый обычный код С++. Ваша ДЛЛ готова и будет работать.
ООП создано в первую очередь для того, чтобы применять объекты не имея представления о их внутреннем устройстве. Мы ездим на автомобиле, и можем не иметь представления о его электронике и устройстве двигателя. В случае с ДЛЛ все аналогично.
Это понятно, сами функции написать не проблема, со всеми соглашениями как в статьях 1 и 2 с этим проблем нет.
Но как я предполагаю, чтобы создать поток для вызываемой функции,
в кейсе DLL_THREAD_ATTACH нужно проделать некое шаманство функциями C++
выделить память, создать поток для этой функции,
а потом это всё почистить в DLL_THREAD_DETACH по этому тут не всё так просто как кажется.
Почему так говорю, потому что пробовал одну асинхронную библиотеку, в которой выполняются задачи асинхронно,
из этой библиотеки я хотел сделать dll, но почему то всегда в конце завершения программы, то есть удаление эксперта с графика, у меня падает терминал.
По этому нужно шаманить с точкой входа и выхода.
По этому нужно шаманить с точкой входа и выхода.
...то есть удаление эксперта с графика, у меня падает терминал.
Не нужно. Виновата не точка входа. Вы что-то делаете не так.
Классы, потоки, и пр., и пр. - все это прекрасно создается и работает в ДЛЛ без всякого шаманства. Но, к моменту выхода все ВАШИ процессы в ДЛЛ должны быть завершены, а объекты уничтожены. При отладке ДЛЛ такое случается.) В С/С++ весь контроль - задача программиста, а не программы.
ЗЫ Я это делаю примерно так. Вызываю из приложения функцию ДЛЛ, скажем
По job=false все процессы завершаются, по delete все объекты под кот выделялась память удаляются, и т.д.Но, к моменту выхода все ВАШИ процессы в ДЛЛ должны быть завершены.
Скорее всего в этом и проблема, этого я не знал, думал что длл сама завершает процессы, при деатаче.
Подумаю над этим как завершить все процессы перед выходом, спасибо за подсказку.
Но как раз DLL_PROCESS_DETACH за это и отвечает, и нужно принудительно в этом кейсе грохать все процессы.
Но как раз DLL_PROCESS_DETACH за это и отвечает, и нужно принудительно в этом кейсе грохать все процессы.
Она отвечает за дисконнект ДЛЛ с приложением. Ответственность DllMain() - поддержка стандартного протокола взаимодействия. DLL_PROCESS_DETACH - это вообще о другом.) Ваши процессы ее никак не интересуют, это исключительно ваше дело.
В МТ есть функция завершения. OnClose(), кажется. Вот из нее все процессы и завершайте вызовом соответствующей функции ДЛЛ.
Она отвечает за дисконнект ДЛЛ с приложением. Ваши процессы ее никак не интересуют, это исключительно ваше дело.
Ок буду пробовать. Благодарю что уделили своё время на пояснение тонкостей, спасибо.