Errors in Clarion 6

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Привет Всем!

Вот пример на C6
Кто что может сказать по поводу ошибки при старте процедуры?
Ошибка происходит в классе FileManager, что то типа "не правильно инициализирован ErrorClass"

И кстати в дебаг режиме клара падает на ASSERT чего по моему в принципе не должно быть ...

--
Всего хорошего
Evgeny mailto:mixer@clarionlife.net
Сайт для кларионистов: http://www.clarionlife.net
Clarion FAQ: http://www.clarionlife.net/cgi-bin/bl_faq.pl?comm=tree

(Добавление)

Что-то мне сильно так кажется, что ты забыл сказать Access:SF.Init

... и избави нас от Глюкавого. Аминь!

---------------------------------------
C уважением,
Юрий Философов,
Главный программист
Корпорация "Диполь", Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ#75924439
Написал: ClaList(2)
Гость

Сообщение Гость »

Народ! Ну может посмотрите пример!?
В принципе я могу решить данную проблему и по другому...
Но все таки у меня подозрение на ошибку в Кларионе.

P.S. Кстати почему в том самом месте в котором падает, если посмотреть в
дизассемблере - стоит два раза одна и та же строка. Что то типа

MOV EBP, [SELF]

нафига два раза одно и то же ?


--
Всего хорошего
Evgeny

(Добавление)

Ну как же... для надежности... :)

Алексей,
начальник отдела ПТО
ООО "ОРК"

mail: alex@jrcn.donetsk.ua, icq: 62605472
www: http://atinet.hypermart.net
http://www.nikasoft.co.uk
http://www.clarionline.h1.ru (FAQ-онлайн)
irc: irc.lucky.net:6669, channel #clarion, Bambino
origin: Да здравстувует пиво душистое, и секса дыханье пушистое
нафига два раза одно и то же ?
Такая вот оптимизация...

---------------------------------------
C уважением,
Юрий Философов
Написал: ClaList(2)
Гость

Сообщение Гость »

Так ты же жаловался, что у тебя FileManager ругался на неверную ссылку на ErrorManager.
Вот что я писал дословно.
И кстати в дебаг режиме клара падает на ASSERT чего по моему в принципе не должно быть

Только вот в ответ НИКТО ничего путного не написал!
Я извиняюсь господа, но если не смотрели пример то зачем отвечать и переспрашивать.

Для Олега Руденко: Может глянешь, и хотя бы наколку дашь, куда копать.

--
Всего хорошего
Evgeny

(Добавление)

Какой сорс и строка?

Best regards,
Andrew Listiev
Work mailto:andrewl@inbox.lv
Home mailto:gidravlic@mhm.lv
ICQ UID: 169357390
MS Messenger: werdna_werdna@hotmail.com
Написал: ClaList(2)
Гость

Сообщение Гость »

Вот пример на C6
Кто что может сказать по поводу ошибки при старте процедуры?
Ошибка происходит в классе FileManager, что то типа "не правильно инициализирован ErrorClass"

И кстати в дебаг режиме клара падает на ASSERT чего по моему в принципе не должно быть ...

--
Всего хорошего
Evgeny

Слушай, Евгений, а на кой ляд ты делаешь Start(SomeProcedure) не имея в этой процедуре оконной структуры? А обработка по Accept?? Тем более что Start можно делать из Fram'a? Или я что-то пропустил или одно из двух ;)

Best regards,
Andrew Listiev

(Добавление)
Только вот в ответ НИКТО ничего путного не написал!
может сочли что это из разряда "черт попутал" :)
пример компилится и запускается
при нажатии на кнопку "без ошибки" все ок'
при нажатии на кнопку "с ошибкой" приложение молча вылетает
--
заменив строку
START(SomeProcedure,25000)
на строку
SomeProcedure
все работет без ошибок.
..а START из метода и не должен работать.

Vladimir Degtyarenko <vlad@v-ufal.chel.su> (Home)

(Добавление)

С какого испуга!? Где это написано? А как у меня до сих пор работало в С5.5
Не веришь могу прислать полный пример который на C5.5 работает а на С6 падает.

--
Всего хорошего
Evgeny

(Добавление)
..а START из метода и не должен работать.
Зачем же так категорично. ;)

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

Код: Выделить всё

SomeProcedure                      PROCEDURE
GlobalErrors               ErrorClass
  CODE
  GLO:SomeFileName = '.\test.tps'
  Access:SomeFile.Init(GlobalErrors)
  Access:SomeFile.Open
  Access:SomeFile.UseFile
  SF:Number = 1
  IF Access:SomeFile.Fetch(SF:KeyNumber) = LEVEL:Benign
    Access:SomeFile.DeleteRecord(FALSE)
    MESSAGE('Запись удалена!')
  ELSE
    SF:Number = 1
    Access:SomeFile.Insert()
    MESSAGE('Запись добавлена!')
  END
  Access:SomeFile.Close
  Access:SomeFile.Kill
--
С уважением,
Дмитрий Осипов mailto:Dima_Osipov@km.ru
Написал: ClaList(2)
Гость

Сообщение Гость »

Не веришь могу прислать полный пример который на C5.5 работает а на С6 падает.
Верю верю, извиняюсь, я просто не так задал поиск в каталоге LIBSRC.
кстати START ипользуется всего три раза в сырцах библиотек :D

одно время много говорили про эту новую модель потоков, так что набиваем шишки, ну или вспоминаем что там говорили про глобальные объекты и их юзание в потоках, мне кажется Олег чтото подобное пояснял.
В данном случае имеем поток номер 1 в котором все работает, и поток создающийся по START в котором оно не хочет работать с объектами проинициированными из потока 1 (трабла с адресацией)
----
твой код начнет работать если вставить дубовый кусок в SomeProcedure:

SomeProcedure PROCEDURE
CODE
IF THREAD() <> 1 THEN SC.Init(GlobalErrors).
...

но, в таком случае лучше перейти на THREAD модель то есть, добавить аттрибут THREAD к файлу и к классу Access:SomeFile (процедура работает ведь только с этими объектами) и завершить эту процедуру:
...
IF THREAD() <> 1 THEN Access:SomeFile.Kill.

С уважением, Владимир Дегтяренко

> С какого испуга!? Где это написано? А как у меня до сих пор
> работало в С5.5

Должен, должен. Дело в другом.
Не веришь могу прислать полный пример который на C5.5 работает а на С6 падает.
Потому и падает, что С6. Почитай про новую тредную модель. Файл глобальный нетредный. Классы глобальные нетредные, а работать с ними хочешь из разных тредов. Как мин. нужна синхронизация доступа.
И кроме того в FileManager в 6-ке используется _тредный_ служебный класс FilesManager. В результате при инициализации и открытии ты работаешь с экземпляром FilesManager основного треда, а при Insert/Delete с экземпляром FilesManager другого треда, который, как минимум, не инициализирован. В общем так писать в 6-ке нельзя.

Если перейдешь на тредный файл и FileManager, учти, что Init, Open, Close, и Kill нужно делать в каждом треде.
Слушай, Евгений, а на кой ляд ты делаешь Start(SomeProcedure) не имея в этой процедуре оконной структуры?
Ну и что? Посмотри как в АВС стартуется процедура из меню. Из метода класса вызывается рутина, и оттуда делается START(). Ни в методе, ни в рутине оконной структуры нет. И для START()-а она вообще нафиг не нужна. Можно стартовать несколько тредов прямо из главного модуля.
А обработка по Accept?? Тем более что Start можно делать из Fram'a? Или я что-то пропустил или одно из двух ;)
Frame нужен чтобы в нем жило MDI окно, которое можно запустить только стартом в отдельном треде. А для самого старта ни фрейм, ни любые другие окна совершенно не нужны.

WBR, Nick Tsigouro
Написал: ClaList(2)
Гость

Сообщение Гость »

Спасибо за толковое объяснение!
Все сделал, все работает.

--
Всего хорошего
Evgeny
Написал: ClaList(2)
Ответить