Ошибки, баги, вопросы - страница 3391

 
Nikolai Semko #:
Ресурсы + union легко с этим справляются. 
Тем более использовать строки разумно непосредственно перед выводом (Print(), Comment() и т.д.). В остальных случаях использовать массив uchar. Благо есть стандартные функции для преобразования string в uchar[] и обратно. 
У fxsaber есть нормально работающая библа для этого.
Можете в этом обсуждении посмотреть примеры.

Посмотрел. При всём уважении к fxsaber за его мега мозг, я не поклонник его стиля программирования.
Там же столько инструкций для компилятора получается.
Разбирать ооп в таком стиле, спасибо это не мой подход, я стремлюсь к минимализму в коде.
Всего то надо передать строку, а такая боль получается. SQLite на память, по интереснее смотрится. 
Но хотелось бы стандартных решений, без бубнов. Работала же библиотека .ex5, что не так стало, не пойму.

 
Ещё вопрос вспомнился.
Есть ли какой способ из сервиса узнать признак открытия стакана?
Например жмакаем на кнопку открытия стакана на чарте, как узнать признак, что по этому инструменту открылся стакан. 
Опять же без dll, и ковыряния в окнах.
 
Roman #:

Посмотрел. При всём уважении к fxsaber за его мега мозг, я не поклонник его стиля программирования.
Там же столько инструкций для компилятора получается.
Разбирать ооп в таком стиле, спасибо это не мой подход, я стремлюсь к минимализму в коде.
Всего то надо передать строку, а такая боль получается. SQLite на память, по интереснее смотрится. 
Но хотелось бы стандартных решений, без бубнов. Работала же библиотека .ex5, что не так стало, не пойму.

С одной стороны я Вас понимаю на счёт кода fxsabera , но, с другой стороны, если бы не поленились ( ведь вопрос задали Вы в надежде получить ответ) и прочитали хотя бы пару страниц обсуждения с сообщения, на которое дал ссылку, то не гнали бы напраслину.
Конструкция ресурсы+ union - это не костыль, а низкоуровневая нативная фича, на основе которой по сути построены сами глобальные переменные. А вот пытаться реализовать подобное через SQLite - это реальный костыль, который будет работать на несколько порядков медленнее.

 
Nikolai Semko #:
С одной стороны я Вас понимаю на счёт кода fxsabera , но, с другой стороны, если бы не поленились ( ведь вопрос задали Вы в надежде получить ответ) и прочитали хотя бы пару страниц обсуждения с сообщения, на которое дал ссылку, то не гнали бы напраслину.
Конструкция ресурсы+ union - это не костыль, а низкоуровневая нативная фича, на основе которой по сути построены сами глобальные переменные. А вот пытаться реализовать подобное через SQLite - это реальный костыль, который будет работать на несколько порядков медленнее.

Перейдя на топик куда ведёт ссыль, в коде автор всегда дает линк на КБ
Перейдя в КБ посмотреть что там, дальше не захотелось вникать.
https://www.mql5.com/ru/code/22166

Для глобалочек ещё куда не шло, можно посмотреть.
https://www.mql5.com/ru/forum/320395/page6#comment_12910394


Почему вы считаете что SQLite на память будет медленнее? Вы замеряли уже?
Почитал статью про базу, и там есть такие строки

//заблокируем базу данных перед выполнением транзакций
DatabaseTransactionBegin(database);

//тут пишем в базу

//все транзакции прошли успешно - зафиксируем изменения и разблокируем базу данных
DatabaseTransactionCommit(database);
То есть как я понял для записи в базу, есть блокирующие защитные функции как я понял.
Если это то о чем я думаю (а думаю о реализации взаимной блокировки) то это же круто.
Интересно какое поведение будет на чтение из базы, когда она заблокирована. Вероятно возвращать ошибку, которую легко обработать.
В общем надо пощупать.  
[Удален]  
Roman #:

Перейдя на топик куда ведёт ссыль, в коде автор всегда дает линк на КБ
Перейдя в КБ посмотреть что там, дальше не захотелось вникать.
https://www.mql5.com/ru/code/22166

Для глобалочек ещё куда не шло, можно посмотреть.
https://www.mql5.com/ru/forum/320395/page6#comment_12910394


Почему вы считаете что SQLite на память будет медленнее? Вы замеряли уже?
Почитал статью про базу, и там есть такие строки

То есть как я понял для записи в базу, есть блокирующие защитные функции как я понял.
Если это то о чем я думаю (а думаю о реализации взаимной блокировки) то это же круто.
Интересно какое поведение будет на чтение из базы, когда она заблокирована. Вероятно возвращать ошибку, которую легко обработать.
В общем надо пощупать.  

Транзакции нужны для того чтобы объединить несколько запросов, которые должны быть выполнены вместе.

Если во время одного из запросов происходит ошибка, отменяются все запросы, входящие в транзакцию.

 
Roman #:

Перейдя на топик куда ведёт ссыль, в коде автор всегда дает линк на КБ
Перейдя в КБ посмотреть что там, дальше не захотелось вникать.
https://www.mql5.com/ru/code/22166

Для глобалочек ещё куда не шло, можно посмотреть.
https://www.mql5.com/ru/forum/320395/page6#comment_12910394


Почему вы считаете что SQLite на память будет медленнее? Вы замеряли уже?
Почитал статью про базу, и там есть такие строки

То есть как я понял для записи в базу, есть блокирующие защитные функции как я понял.
Если это то о чем я думаю (а думаю о реализации взаимной блокировки) то это же круто.
Интересно какое поведение будет на чтение из базы, когда она заблокирована. Вероятно возвращать ошибку, которую легко обработать.
В общем надо пощупать.  

Транзакции обеспечивают атомарность изменений. Результат UPDATE/INSERT/DELETE зафиксируется в базе после COMMIT. Для читателя базы - одномоментно, вот данных не было и тут раз и много всяких :-)

Скорость работы SQLite критично зависит от скорости доступа к диску. Если база лежит в RAM-диск (или используется memory: база), то задержки практически на грани погрешности измерений. 

 
Koldun Zloy #:

Транзакции нужны для того чтобы объединить несколько запросов, которые должны быть выполнены вместе.

Если во время одного из запросов происходит ошибка, отменяются все запросы, входящие в транзакцию.

Да, спасибо что уточнили. Но нам никто же не запрещает это делать для оного запроса )
Смысл в том, что есть блокировка. Что нам и нужно.
А возможность  объединять несколько запросов, позволяет писать пропущенные данные вместе с текущими.
Это же находка просто. То что нужно.

Maxim Kuznetsov #:

Транзакции обеспечивают атомарность изменений. Результат UPDATE/INSERT/DELETE зафиксируется в базе после COMMIT. Для читателя базы - одномоментно, вот данных не было и тут раз и много всяких :-)

Скорость работы SQLite критично зависит от скорости доступа к диску. Если база лежит в RAM-диск (или используется memory: база), то задержки практически на грани погрешности измерений. 

Спасибо. Получается через память, это подобие memory mapped files.
Пошел учить базы. 

[Удален]  
Roman #:

Да, спасибо что уточнили. Но нам никто же не запрещает это делать для оного запроса )
Смысл в том, что есть блокировка. Что нам и нужно.
А возможность  объединять несколько запросов, позволяет писать пропущенные данные вместе с текущими.
Это же находка просто. То что нужно.

Спасибо, пошел учить базы. 

Для одного запроса незачем. Блокировка есть в любом случае.

 
Где посмотреть актуальное описание методов/операторов для векторов/матриц?
void OnStart()
{
  const double Array[] = {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3};
  matrix<double> Matrix;
    
  // https://www.mql5.com/ru/docs/basis/types/matrix_vector
  Matrix.FromBuffer(4, 3, Array); // 'FromBuffer' is not a member of 'matrix' type
}

Метод matrix/vector

Аналог в NumPy

Описание

void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0)

frombuffer

Создает матрицу из одномерного массива

 
fxsaber #:
Где посмотреть актуальное описание методов/операторов для векторов/матриц?

Такая же ошибка выводится для метода .Sort() в векторах.
Разработчик отвечал, что метод не реализован.
Скорее всего то-же самое для метода .FromBuffer()

Его нет

mm