Зависает flush() и close()
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Зависает flush() и close()
Добрый день!
Переводим приложение с Clarion 6.1 на 6.3. В 6.1 работало все нормально. В 6.3 очень странное поведение: программа зависает, если в одну из таблиц внести изменения и вызвать flush() или close(). Мы открываем таблицу либо с использованием set(), либо stream(). Программа виснет намертво, ни на строчку в дебаггере дальше не двигается. Однако в status bar прогарммы часики продолжают идти.
Пока нашли следующее решение - перед вызовом stream() делать close(). Не понятно, почему это помогает, вроде до этого все и так должно быть закрыто. Пробовали на Clarion 6.2 - та же история. Решение-то есть, но какое-то оно неправильное, мало ли где грабли вылезут.
Кто-нибудь с таким сталкивался? В чем может быть причина?
Еще, если кто сталкивался, почему может происходить визуальное смещение контролов в формах при переходе с 6.1 на 6.3 - сильно сдвигаются?
Большое спасибо!
Переводим приложение с Clarion 6.1 на 6.3. В 6.1 работало все нормально. В 6.3 очень странное поведение: программа зависает, если в одну из таблиц внести изменения и вызвать flush() или close(). Мы открываем таблицу либо с использованием set(), либо stream(). Программа виснет намертво, ни на строчку в дебаггере дальше не двигается. Однако в status bar прогарммы часики продолжают идти.
Пока нашли следующее решение - перед вызовом stream() делать close(). Не понятно, почему это помогает, вроде до этого все и так должно быть закрыто. Пробовали на Clarion 6.2 - та же история. Решение-то есть, но какое-то оно неправильное, мало ли где грабли вылезут.
Кто-нибудь с таким сталкивался? В чем может быть причина?
Еще, если кто сталкивался, почему может происходить визуальное смещение контролов в формах при переходе с 6.1 на 6.3 - сильно сдвигаются?
Большое спасибо!
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Зависает flush() и close()
Добрый день.
Алексей
Что значит либо? Это две разные вещи. set должен быть всегда (ну , если Вы не используете get), а stream - по вкусу .Мы открываем таблицу либо с использованием set(), либо stream().
Алексей
Re: Зависает flush() и close()
Виноват. Мы сначала делаем stream(), потом set().
Основной вопрос - почему зависает? Ни предупреждения, ни ошибки, просто виснет и все...
Основной вопрос - почему зависает? Ни предупреждения, ни ошибки, просто виснет и все...
-
- Ветеран
- Сообщения: 311
- Зарегистрирован: 08 Июль 2005, 22:04
Re: Зависает flush() и close()
Да,знакомая проблема.Сталкивался с ней,но проблема не в клаше,а в винде.
Попробуй запустить свою прогу под WIN98.Se.Если там все в порядке,то это точно винда.
Начиная с WINNT(кстати,это разработка DEC) проблема синхронизации данных в кэш-памяти и
реально на диске иногда возникает.Мне об этом говорили не один раз "спецы" с сертификатами
от мягких.Как ее лечить,да общих рецептов и нет.Нужно пытаться избегать массовых потоковых
операций работы с данными.Включать искуственные тормоза что-ли.Но это уже высший пилотаж.
Попробуй запустить свою прогу под WIN98.Se.Если там все в порядке,то это точно винда.
Начиная с WINNT(кстати,это разработка DEC) проблема синхронизации данных в кэш-памяти и
реально на диске иногда возникает.Мне об этом говорили не один раз "спецы" с сертификатами
от мягких.Как ее лечить,да общих рецептов и нет.Нужно пытаться избегать массовых потоковых
операций работы с данными.Включать искуственные тормоза что-ли.Но это уже высший пилотаж.
Re: Зависает flush() и close()
Честно говоря, win98 уже много лет не использовали. У нас стоит WinXP, Vista и 7-ка. Везде результат одинаков. Если бы проблема была не в Кларион, то на 6.1 также не работало бы. Однако проблема возникает при повышении версии с 6.1 до 6.2 или 6.3. Предполагаю, что это ошибка в нашем коде. Также нелогичным выглядит зависание приложения в Clarion. Он мог бы ругаться. Вероятно, какой-то дедлок, поэтому и не ругается. Но у нас явной многопоточности нет.
Re: Зависает flush() и close()
На всех кларинонах до 7 всегда при пакетном добавлении изменении делал open() stream() затем добавляю удаляю и изменяю и flush() close(). Проблем никогда не было все работает быстро. На счет set get точно сразу не вспомню используется-ли это в процессе доступа к полям изменяемых файлов (думаю что да поскольку в процессе обработки есть delete и get а не только add).
Re: Зависает flush() и close()
Большое спасибо вам, Seawolf! Думаю, у нас где-то действительно пропущены close() и мы делаем open() и stream() на уже открытом файле. Просто странно - на 6.1 работает прекрасно, а здесь такие грабли. И не похоже это на нормальное поведение среды. В C# бы сразу вывалил Exception и проблем нет, а тут зависания.