
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Благодарю за живой отклик
Переделал на потоках из STL по той же схеме, работает нормально как полностью в фоновом режиме когда управление сразу возвращается в индикатор, так и с ожиданием завершения
А массив разве так должен передаваться в C++? Не нужно ли заменить double v[] на double *v в реализации random в DLL? Может из-за этого память портится.
Записи эквивалентны для С++, скорее для восприятия удобнее что передается массив или указатель на один объект, и v[1] эквивалентно *(v+1)
С Qt не работал, но что-то мне подсказывает, что:
не дает указаний на остановку потока, а только ждет его завершения. А раз так, то поток остается активным, из-за чего и происходит зависание.
По идее, QtConcurrent::run запускает функцию разово, т.е. как только функция завершает свою работу, то и завершается работа потока
waitForFinish как раз позволяет дождаться этого момента
И в процессе работы индикатора данные обновляются, график перерисовывается, что говорит о том что поток завершается и управление возвращается после waitForFinish
Как написал выше, переделал через stl и все норм теперь, какой-то конфликт с работой Qt в этой области, к сожалению, пока не понял что к чему
ни перед функцией ни после? как ведет себя в дебаг режиме?
как вариант принтов может не быть как раз из-за того что терминал виснет, а виснет он скорее всего уже после OnDeinit, потому что я не верю что waitForFinished без задачи может устроить дедлок
В дебаге все норм, даже после завершения отладки пишется что индикатор удален, однако, окно индикатора с графиком остается и при попытке закрыть его терминал виснет
Какой-то конфликт с реализацией при помощи Qt
Реализация на stl
Тут конечно надо добавить синхронизацию, в OnDeinit поставить ожидание завершения потока и т.п.
Еще по хорошему надо данные готовить отдельно и потом копировать в буфер индикатора когда они готовы, но вроде как не критично
Кому интересно в тему углубиться, рекомендую почитать https://thispointer.com/c11-multithreading-tutorial-series/
Там много статей о многопоточности и какими инструменты для этого применяются
Открыл для себя много нового