Threads в С55

Clarion, Clarion 7

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

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

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

Добрый день!
Подскажите, пожалуйста правильный выход из ситуации!
Есть простенькое приложение - две процедуры (P1 и P2). P1 написана ручками, P2 генерится по шаблону ABC (View an ASCII File). P2 запускается из P1 с созданием отдельного потока. В каждой процедуре, соответственно, открыто по окошку (не модальному и не mdi). Я хочу, закрывая окно в P1, автоматически закрыть и окно в P2. Как делаю:
в P1 в цикле accept на event:CloseWindow выполняю команду post(event:CloseWindow,,number_of_second_thread), после чего делаю break из accept-цикла. Окно в P1 закрывается, а дальше получаю ошибку: "Accertion failed on line 178 in file aberror.clw. Message: ErrorClass incorrect initialized".
Если правильно понимаю, у меня сначала закрывается приложение, убиваются классы, в том числе ErrorClass, и только затем выполняется post.

Пока я выкрутился тем, что не даю закрывать первое окно при наличии открытого второго, а как это сделать на автомате?
Написал: PKV(132)
Гость

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

А зачем Break? Пусть всё идёт как шло... Просто ABC может ещё кое-чего доделать по Event:CloseWindow, а ты не даёшь
Пока я выкрутился тем, что не даю закрывать первое окно при наличии открытого второго, а как это сделать на автомате?
Вообще-то я в своё время изрядно помучился с этой проблемой. В 5.5 параллельное исполнение открытия/закрытия нескольких тредов весьма чреватый глюками процесс. Я у себя использовал искусственную приостановку треда, чтобы дать другому завершиться.

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

   Post(Event:CloseWindow,,Thread2) 
   0{Prop:Timer}=50
   Accept 
     Break
   End 
Accept приостановит выполнение текущего треда и вызовет передачу управления на Thread2, который сможет завершиться. А через полсекунды закроется и основной тред.

... А в 6.0 я выскребал эти фрагменты из программы...

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

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

Я у себя использовал искусственную приостановку треда, чтобы дать другому завершиться.
Помогло. Спасибо огромное!
Написал: PKV(132)
Ответить