Чертовщина с параметром

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Чертовщина с параметром

Сообщение Игорь Столяров » 04 Декабрь 2019, 21:43

Привет всем ! :)
Сейчас попробую описать то, чего не понимаю.

Среда: С11, у меня Win10, у клиента Win7.
Факты: Из Frame открывается MDI окно как поток и в него передаётся параметр Group как обычный String.
Всё было хорошо долгие лета, до того момент пока Size(Group) не вывалился за 1024 (сейчас 1055).

Дальше непонятно. У меня вообще проблем нет. Клиент эпизодически сообщает, что у него вываливается
ошибка связанная с тем, что параметр передаётся не полностью. Поставил на входе процедуры проверку
размера получаемого параметра - нет ошибок. Клиенту программу поставил - нет ошибок. Часа через два
он звонит и начинает рассказывать, что у него где-то 1 раз через 5 открытий окна появляется сообщение
"Ошибка параметра, размер 1024". Приезжаю, 20 раз открываю окно - нет ошибок, уезжаю - звонки повторяются … :(

Ничего не понимаю ! Что это вообще может быть такое ? :(
Может что-то извне влиять на размер стека приложения ?
«V» значит Вендетта !

kreator
✯ Ветеран ✯
Сообщения: 3469
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Чертовщина с параметром

Сообщение kreator » 05 Декабрь 2019, 10:57

Понятно, что в хелпе насчёт этого ничего. Поэкспериментируйте с размером стека. В хелпе - 35000. Я пользую значение по умолчанию (25000). Есть ещё возможность разбить на три "строки". Но наверняка дополнительные две уже заняты :) .
We are hard at work… for you. :)

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1394
Зарегистрирован: 06 Ноябрь 2014, 12:48

Чертовщина с параметром

Сообщение finsoftrz » 05 Декабрь 2019, 12:09

Я передаю параметры между тредами через глобальную очередь. Она одна для всего. Работа с ней через специальные функции, в которых запись и чтение семафорятся. Сверху кодовые шаблоны. Передавать можно как обычные параметры, так и списковые. Есть еще аналогичный механизм для передачи параметров внутри треда, но он используется редко.
Рязань решает.

Yufil
Ветеран движения
Сообщения: 1170
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Чертовщина с параметром

Сообщение Yufil » 05 Декабрь 2019, 14:17

kreator писал(а):
05 Декабрь 2019, 10:57
Понятно, что в хелпе насчёт этого ничего. Поэкспериментируйте с размером стека. В хелпе - 35000. Я пользую значение по умолчанию (25000). Есть ещё возможность разбить на три "строки". Но наверняка дополнительные две уже заняты :) .
Когда-то в прошлом тысячелетии обсуждалась похожая проблема.
Можно попробовать в качестве параметра передавать в строковом поле адрес группы ( Start( MyThread,25000,Address(MyGroup) & '') , а не саму группу, а уже внутри треда скопировать группу с указанным адресом в локальную переменную

Не помню, чем кончилось - OK или GPF

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

MyThread Procedure( String MyStartAddr ) 
! CopyMemory Procedure(Ulong Dest,Ulong Src,Ulong Size),Name('_memmove')
Myaddr         ULONG 
.... 
myAddr  = MyStartAddr 
.... 
СopyMemory(  address( LocalGroup ), MyAddr, Len( LocalGroup )) 
... 

Аватара пользователя
vic7tar
Старожил
Сообщения: 260
Зарегистрирован: 09 Февраль 2017, 20:12

Чертовщина с параметром

Сообщение vic7tar » 05 Декабрь 2019, 17:08

Игорь Столяров писал(а):
04 Декабрь 2019, 21:43
...появляется сообщение
"Ошибка параметра, размер 1024..."
А кто (или что) выдаёт такое сообщение?
C10, Win10x64

kreator
✯ Ветеран ✯
Сообщения: 3469
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Чертовщина с параметром

Сообщение kreator » 05 Декабрь 2019, 17:16

vic7tar писал(а):
05 Декабрь 2019, 17:08
Игорь Столяров писал(а):
04 Декабрь 2019, 21:43
...появляется сообщение
"Ошибка параметра, размер 1024..."
А кто (или что) выдаёт такое сообщение?
Разработчик, очевидно.
We are hard at work… for you. :)

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Чертовщина с параметром

Сообщение Игорь Столяров » 05 Декабрь 2019, 17:36

kreator писал(а):
05 Декабрь 2019, 17:16
А кто (или что) выдаёт такое сообщение?
Да, это моё отладочное сообщение если в процедуру попадает строка-параметр размером меньше, чем Size(MyGroup).
Кстати там ещё один прикол: если запускать под терминальным сервером, то проблема становиться прям настойчивой … ;)
«V» значит Вендетта !

Аватара пользователя
vic7tar
Старожил
Сообщения: 260
Зарегистрирован: 09 Февраль 2017, 20:12

Чертовщина с параметром

Сообщение vic7tar » 05 Декабрь 2019, 18:40

kreator писал(а):
05 Декабрь 2019, 17:16
Разработчик, очевидно.
А может такое быть, что разработчик в схеме преобразований группа->строка->группа допустил неточность?
C10, Win10x64

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Чертовщина с параметром

Сообщение Игорь Столяров » 05 Декабрь 2019, 19:12

vic7tar писал(а):
05 Декабрь 2019, 18:40
разработчик в схеме преобразований группа->строка->группа допустил неточность
Да нет там никаких преобразований.

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

! -- Вызов
Loc:MyGroup  Group(TypeGroup).
  Code
  ...
  Start(Browse_Bablo,25000,Loc:MyGroup)
  
!--- Получаем
Bablo Procedure(String xParam_)
Loc:MyGroup  Group(TypeGroup).
  Code
  Loc:MyGroup  = xParam_
  ...
Я бы сказал, что ситуация в какой-то момент начинает развиваться непредсказуемо и выходит из под контроля.
Напрямую я в память не лезу, здесь нет никаких манипуляций с адресами процедур и данных …
Непонятно, но я не сдаюсь. Треугольник будет выпит, будь он хоть параллелепипед ! :)
«V» значит Вендетта !

Аватара пользователя
vic7tar
Старожил
Сообщения: 260
Зарегистрирован: 09 Февраль 2017, 20:12

Чертовщина с параметром

Сообщение vic7tar » 05 Декабрь 2019, 19:26

Определение TypeGroup можно посмотреть?
C10, Win10x64

Amike34
Посетитель
Сообщения: 47
Зарегистрирован: 03 Август 2005, 18:06
Откуда: г. Чебоксары

Чертовщина с параметром

Сообщение Amike34 » 06 Декабрь 2019, 10:23

Игорь Столяров писал(а):
05 Декабрь 2019, 19:12
! -- Вызов
Loc:MyGroup Group(TypeGroup).
Code
...
Start(Browse_Bablo,25000,Loc:MyGroup)

!--- Получаем
Bablo Procedure(String xParam_)
Loc:MyGroup Group(TypeGroup).
Code
Loc:MyGroup = xParam_
...

Может быть попробовать:
Loc:MyGroup :=: xParam_

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Чертовщина с параметром

Сообщение Игорь Столяров » 06 Декабрь 2019, 10:39

Amike34 писал(а):
06 Декабрь 2019, 10:23
Может быть попробовать:
Loc:MyGroup :=: xParam_
Спасибо, пробовал.
Но сожалению, уже на входе процедуры мерцает проблема Size(xParam_) <> Size(Loc:MyGroup).
И как следствие, присваиванием по полям проблему не решить.

Тут что-то напрямую связанное с названием темы. Вроде бы отловил один косяк - сейчас тестируется.
Если всё будет OK - непременно доложу о результате, и это будет неожиданный поворот событий. :)
«V» значит Вендетта !

Constantine
Активист
Сообщения: 148
Зарегистрирован: 07 Февраль 2017, 16:58

Чертовщина с параметром

Сообщение Constantine » 06 Декабрь 2019, 10:42

А если так?
Loc:MyGroup Group(TypeGroup),STATIC.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Чертовщина с параметром

Сообщение Игорь Столяров » 06 Декабрь 2019, 10:58

Constantine писал(а):
06 Декабрь 2019, 10:42
Loc:MyGroup Group(TypeGroup),STATIC.
Ну это уже танцы с бубном. :)
Так или иначе при вызове процедуры параметры записываются в стек, независимо от места объявления параметра.
И после вызова процедуры, что-то эпизодически сбивает этот процесс обмена данными.
«V» значит Вендетта !

Constantine
Активист
Сообщения: 148
Зарегистрирован: 07 Февраль 2017, 16:58

Чертовщина с параметром

Сообщение Constantine » 06 Декабрь 2019, 11:13

Ну, мое дело - предложить... :-)

Ответить