Как советнику перезагрузить себя? - страница 4

 
Andrey Khatimlianskii:

Ну вы же все сами знаете, как приятно перегружать тот же МТ5... Хочется без этого.

А портейбл, к сожалению, только у местных программистов включен, полагаться на не го не приходится.

Когда-то давно включил по неосторожности. Сейчас ни один терминал не работает в портейбл-режиме, и в будущем не планируется. 

 
Ihor Herasko:
Maxim Kuznetsov:

Все-таки нестабильно работает, иногда подвисает.

Это из-за ДЛЛ, как считаете?

 
Andrey Khatimlianskii:

Все-таки нестабильно работает, иногда подвисает.

Это из-за ДЛЛ, как считаете?

это из за кода

 
Andrey Khatimlianskii:

Все-таки нестабильно работает, иногда подвисает.

Это из-за ДЛЛ, как считаете?

В чем проявляется нестабильность? Если виснет при смене шаблона, то, скорее всего, дело в том, что DLL не выгрузилась. Наиболее распространенная причина - deadlock. Если DLL активно общается с терминалом во время своего выполнения, то даже обычный SendMessage может привести к такой ситуации. Поэтому, где возможно, использую PostMessage.

 
Ihor Herasko:

В чем проявляется нестабильность? Если виснет при смене шаблона, то, скорее всего, дело в том, что DLL не выгрузилась. Наиболее распространенная причина - deadlock. Если DLL активно общается с терминалом во время своего выполнения, то даже обычный SendMessage может привести к такой ситуации. Поэтому, где возможно, использую PostMessage.

Да, подвисает при смене.

Как бы организовать паузу, чтобы все само собой выгрузилось...

 
Andrey Khatimlianskii:

Да, подвисает при смене.

Как бы организовать паузу, чтобы все само собой выгрузилось...

Пауза не поможет. Ведь это просто откладывание проблемы на время. В итоге вероятность dealock остается той же. Если DLL с кодом, то нужно просмотреть все ее обращения к окнам терминала (или даже к самому процессу). 

Да, еще есть такой момент: сообщает ли советник библиотеке о том, что нужно выгрузиться? Если этого нет, то добавление такого кода вполне может решить проблему. То есть перед выгрузкой советника нужно дать указание всем потокам в DLL закончить работу. Потом только производить действия по выгрузке самого советника.

 
Ihor Herasko:

Пауза не поможет. Ведь это просто откладывание проблемы на время. В итоге вероятность dealock остается той же. Если DLL с кодом, то нужно просмотреть все ее обращения к окнам терминала (или даже к самому процессу). 

Да, еще есть такой момент: сообщает ли советник библиотеке о том, что нужно выгрузиться? Если этого нет, то добавление такого кода вполне может решить проблему. То есть перед выгрузкой советника нужно дать указание всем потокам в DLL закончить работу. Потом только производить действия по выгрузке самого советника.

терзают меня смутные сомнения, что вы не писали DLL или свои мысли доносите очень странно

 
Maxim Kuznetsov:

терзают меня смутные сомнения, что вы не писали DLL или свои мысли доносите очень странно

Что именно в выделенной фразе непонятно? Тот факт, что DLL может создавать несколько ниток?

P. S. Хотя неправильно понял Вашу фразу. Сомнения то терзают насчет того, что я не писал DLL. Правильно терзают ))

 
Ihor Herasko:

Что именно в выделенной фразе непонятно? Тот факт, что DLL может создавать несколько ниток?

то что советник не может застаить библиотеку выгрузится. физически не может
 
Maxim Kuznetsov:
то что советник не может застаить библиотеку выгрузится. физически не может

Я ведь нигде не писал о том, что DLL нужно выгрузить. Этим занимается терминал. Я написал: сообщает о том, что нужно выгрузиться. Не додумывайте пожалуйста того, о чем я не писал.

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