Чертовщина с параметром
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
Чертовщина с параметром
Привет всем !
Сейчас попробую описать то, чего не понимаю.
Среда: С11, у меня Win10, у клиента Win7.
Факты: Из Frame открывается MDI окно как поток и в него передаётся параметр Group как обычный String.
Всё было хорошо долгие лета, до того момент пока Size(Group) не вывалился за 1024 (сейчас 1055).
Дальше непонятно. У меня вообще проблем нет. Клиент эпизодически сообщает, что у него вываливается
ошибка связанная с тем, что параметр передаётся не полностью. Поставил на входе процедуры проверку
размера получаемого параметра - нет ошибок. Клиенту программу поставил - нет ошибок. Часа через два
он звонит и начинает рассказывать, что у него где-то 1 раз через 5 открытий окна появляется сообщение
"Ошибка параметра, размер 1024". Приезжаю, 20 раз открываю окно - нет ошибок, уезжаю - звонки повторяются …
Ничего не понимаю ! Что это вообще может быть такое ?
Может что-то извне влиять на размер стека приложения ?
Сейчас попробую описать то, чего не понимаю.
Среда: С11, у меня Win10, у клиента Win7.
Факты: Из Frame открывается MDI окно как поток и в него передаётся параметр Group как обычный String.
Всё было хорошо долгие лета, до того момент пока Size(Group) не вывалился за 1024 (сейчас 1055).
Дальше непонятно. У меня вообще проблем нет. Клиент эпизодически сообщает, что у него вываливается
ошибка связанная с тем, что параметр передаётся не полностью. Поставил на входе процедуры проверку
размера получаемого параметра - нет ошибок. Клиенту программу поставил - нет ошибок. Часа через два
он звонит и начинает рассказывать, что у него где-то 1 раз через 5 открытий окна появляется сообщение
"Ошибка параметра, размер 1024". Приезжаю, 20 раз открываю окно - нет ошибок, уезжаю - звонки повторяются …
Ничего не понимаю ! Что это вообще может быть такое ?
Может что-то извне влиять на размер стека приложения ?
За теми кто отстал - не возвращаться. (С) Кодекс
-
- ✯ Ветеран ✯
- Сообщения: 5025
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 22 раза
Чертовщина с параметром
Понятно, что в хелпе насчёт этого ничего. Поэкспериментируйте с размером стека. В хелпе - 35000. Я пользую значение по умолчанию (25000). Есть ещё возможность разбить на три "строки". Но наверняка дополнительные две уже заняты .
We are hard at work… for you.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4688
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 10 раз
- Поблагодарили: 37 раз
Чертовщина с параметром
Я передаю параметры между тредами через глобальную очередь. Она одна для всего. Работа с ней через специальные функции, в которых запись и чтение семафорятся. Сверху кодовые шаблоны. Передавать можно как обычные параметры, так и списковые. Есть еще аналогичный механизм для передачи параметров внутри треда, но он используется редко.
C6/C11, ШВС, tps/btrieve.
Чертовщина с параметром
Когда-то в прошлом тысячелетии обсуждалась похожая проблема.
Можно попробовать в качестве параметра передавать в строковом поле адрес группы ( 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 ))
...
Чертовщина с параметром
А кто (или что) выдаёт такое сообщение?Игорь Столяров писал(а): ↑04 Декабрь 2019, 21:43...появляется сообщение
"Ошибка параметра, размер 1024..."
C10, Win10x64
-
- ✯ Ветеран ✯
- Сообщения: 5025
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 22 раза
Чертовщина с параметром
Разработчик, очевидно.vic7tar писал(а): ↑05 Декабрь 2019, 17:08А кто (или что) выдаёт такое сообщение?Игорь Столяров писал(а): ↑04 Декабрь 2019, 21:43...появляется сообщение
"Ошибка параметра, размер 1024..."
We are hard at work… for you.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
Чертовщина с параметром
Да, это моё отладочное сообщение если в процедуру попадает строка-параметр размером меньше, чем Size(MyGroup).
Кстати там ещё один прикол: если запускать под терминальным сервером, то проблема становиться прям настойчивой …
За теми кто отстал - не возвращаться. (С) Кодекс
Чертовщина с параметром
А может такое быть, что разработчик в схеме преобразований группа->строка->группа допустил неточность?
C10, Win10x64
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
Чертовщина с параметром
Да нет там никаких преобразований.
Код: Выделить всё
! -- Вызов
Loc:MyGroup Group(TypeGroup).
Code
...
Start(Browse_Bablo,25000,Loc:MyGroup)
!--- Получаем
Bablo Procedure(String xParam_)
Loc:MyGroup Group(TypeGroup).
Code
Loc:MyGroup = xParam_
...
Напрямую я в память не лезу, здесь нет никаких манипуляций с адресами процедур и данных …
Непонятно, но я не сдаюсь. Треугольник будет выпит, будь он хоть параллелепипед !
За теми кто отстал - не возвращаться. (С) Кодекс
Чертовщина с параметром
Игорь Столяров писал(а): ↑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_
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
Чертовщина с параметром
Спасибо, пробовал.
Но сожалению, уже на входе процедуры мерцает проблема Size(xParam_) <> Size(Loc:MyGroup).
И как следствие, присваиванием по полям проблему не решить.
Тут что-то напрямую связанное с названием темы. Вроде бы отловил один косяк - сейчас тестируется.
Если всё будет OK - непременно доложу о результате, и это будет неожиданный поворот событий.
За теми кто отстал - не возвращаться. (С) Кодекс
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58
- Игорь Столяров
- Ветеран движения
- Сообщения: 7447
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 51 раз
Чертовщина с параметром
Ну это уже танцы с бубном.
Так или иначе при вызове процедуры параметры записываются в стек, независимо от места объявления параметра.
И после вызова процедуры, что-то эпизодически сбивает этот процесс обмена данными.
За теми кто отстал - не возвращаться. (С) Кодекс
-
- Активист
- Сообщения: 185
- Зарегистрирован: 07 Февраль 2017, 16:58