Добрый день! У меня в программе есть проблема- при считывании данных из БД MS SQL подвисает вся программа, пока считывание данных не закончится. Проведя поиск по форуму я увидел, что эта проблема давняя и рекомендовалось решать ее переводом выполнения связи с субд в "свой поток"(Единица измерения- "свой поток", период= номеру потока).
Я перевел канал SQLQuery, привязанный к запросу СУБД в "свой поток", но это не помогло- в таком режиме запрос никогда не останавливается и на входе(In) канала SQLQuery постоянно висит 65535.
Подскажите, как решить эту проблему? Может быть для помещения канала SQLQuery в свой поток нужно выполнить еще какие-то действия кроме выставления параметров: Единица измерения- "свой поток", период= номеру потока?
Posted by Eman1982 (Участник № / Member № 5619) on :
Установлен TraceMode 6.08, ОС Windows XP SP3.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Выставьте каналу период пересчета "цикл IDLE".
Posted by Eman1982 (Участник № / Member № 5619) on :
Спасибо за ответ, но все-таки, как сделать выполнение SQL-запроса в своем потоке?
Я попробовал все варианты, в т.ч. поставить "цикл IDLE", это приводит к некоторым странным глюкам. Например, после запроса в лог-файле появляется запись:
16:14:20 0000 00000000[0] 31.05.2012 16:14:20 0000 00000000[132616] Start 16:14:31 0000 00000001[1] Calc loop is big
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
В релизе 6.08 выполнение SQL-запроса в своем потоке не работает. Ошибка будет исправлена в следующем релизе.
При появлении сообщения "Calc loop is big", приоритеты потоков в проекте были выставлены по умолчанию? Ошибка возникает после каждого выполнения SQL-запроса?
Posted by Eman1982 (Участник № / Member № 5619) on :
Настройки приоритетов я не трогал. Вы имеете в виду настройки по адресу RTM->Редактировать->Дополнительно->Приоритеты потоков? Там все Default.
Я ввел в программу переменную @Calculate_Cycle- реальное время вып-я цикла. Так вот, когда идет SQL-запрос чтения, эта переменная изменяется с 0... 2 до 17740 т.е. 17 секунд! Вот только что проверял. В SQLQuery выставлен "цикл IDLE". К тому же, когда выставлен "цикл IDLE" пока идет чтение SQL, параметры с датчиков "зависают" на экране- отображение показаний датчиков не меняется.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Да. Имелись в виду настройки приоритетов в редакторе узла проекта.
База данных локальная? В результате выполнения SQL-запроса данные в аргументы каналов поступают? Какие значения выставлены для циклов CALC и IDLE?
Создайте в папке узла проекта cnf-файл с ключом "DEBUGON=60054010" и воспроизведите ситуацию. После этого отправьте на hotline3@adastra.ru файл протокола профайлера, файл tm6_log.txt и prj-файл проекта.