Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Синхронизация вывода форм


Автор: Severyanin 17.11.2008, 04:53
Доброе время суток. Возникла достаточно банальная проблема, но которая меня пока загнала в тупик пока. Я читаю с порта некоторые данные, которые я потом в базу кладу. Но с устройства приходят не все данные, а часть из них юзер вводит вручную на отдельной форме. мне необх
одимо продолжить выполнение запроса и следующую итерацию цикла только после того, как юзер введет данные в текстовые поля этой второй формы.

Автор: mrbrooks 17.11.2008, 08:45
Severyanin, Просто интересно а каково тогда время опроса девайса с которого приходит инфа? НЕ проще ли уже потом после опроса заполнить необходимые поля - а не во время? 

Автор: REZiaMIX 17.11.2008, 08:47
Точно задачу не понял , но нельзя ли сделать так:
Всю инфу приходящую с девайса записывать , потом получать данные от пользователя , потом уже раскладывать по полочкам.

Автор: mrbrooks 17.11.2008, 09:00
REZiaMIX, вот и я об том же. На мой взгляд совершенно грамотный выход. В противном случае юзер замается очень быстро что то вписывать  smile 

Автор: AntonChik 17.11.2008, 09:06
а юзер после заполнения полей не жмет например ОК? smile
вторая форма модально запускается?
опрос порта не в отдельном потоке?

Автор: Severyanin 17.11.2008, 09:08
нет, ак сделать не получится по двум причинам: это каждый блок такой весит килобайт, и всего могут прийти 13615 блоков. Соответственно, памяти дофига. И это учитывая то, что еще приходится хранить карту адресов этого всего, и главное - это то, что для каждого объекта, о котором приходит информация, пользователь вводит свои данные. Но даже если то все сделать, проблема все равно останется)))) форму-то также надо будеи вызывать, но только в другом цикле))

Добавлено через 52 секунды
Я предлагал вводить недостающую информацию в девайс, с которого это все передается, но кристалльщик этого не сделал, так что приходится так извращаться

Автор: REZiaMIX 17.11.2008, 09:34
Цитата(Severyanin @ 17.11.2008,  09:08)
нет, ак сделать не получится по двум причинам: это каждый блок такой весит килобайт, и всего могут прийти 13615 блоков. Соответственно, памяти дофига. И это учитывая то, что еще приходится хранить карту адресов этого всего, и главное - это то, что для каждого объекта, о котором приходит информация, пользователь вводит свои данные. Но даже если то все сделать, проблема все равно останется)))) форму-то также надо будеи вызывать, но только в другом цикле))

Добавлено @ 09:09
Я предлагал вводить недостающую информацию в девайс, с которого это все передается, но кристалльщик этого не сделал, так что приходится так извращаться

13615 * 1кб = 13615кб = ~13 мб 
Не думаю что с современными компьютерами это много)))
В крайнем случае можно записывать на диск.

Т.е приходят блоки , сохраняются . После дополнения каждого блока пользователем он кладется в базу.

Автор: Severyanin 17.11.2008, 09:39
AntonChik,
Цитата

 а юзер после заполнения полей не жмет например ОК? 
вторая форма модально запускается?
опрос порта не в отдельном потоке?

опрос порта, конечно, в отдельном потоке. А насчет модального отображения формы... Я и хотел бы узнать, как лучше. Я с виндовыми приложениями не работал никогда, это, можно сказать, первый раз, поэтому прошу всех ориентироваться в ответах на ламера. Юзер, конечно, жмет OK. Я уже думал, что код записи в базу повесить на обработчик клика по этой кнопке, но решения это не даст, так как в это время пойдет следующая итерация. я уже даже с мьютексами извращался - не помогло 

Автор: mrbrooks 17.11.2008, 09:47
Severyanin, камрад
Во первых - рекомендую вести запись в БД по изменению данных а не валить все подряд. 
Во вторых - какие данные должен заносить юзверь?

Автор: Severyanin 17.11.2008, 09:54
Цитата

 какие данные должен заносить юзверь?
Видимо, я не достаточно точно описал назначение. девайс предназначен для мониторинга коррозионного состояния опор контактной сети. То есть, человек идет и измеряет нужные опоры с прибором. Номер опоры в пределах олной дороги(железной) не уникален, для каждого отделения дороги опоры нумеруются по-разному, поэтому для нахождения нужной опоры пользователь должен будет ввести отделение дороги, дистанцию и перегон, на котором находится данная опора. И для статистики нужны все записи, поэтому запись по изменению не подойдет

Добавлено через 1 минуту и 59 секунд
То есть, эти данные для каждой опоры будут уникальны

Автор: mrbrooks 17.11.2008, 10:04
Цитата(Severyanin @  17.11.2008,  09:54 Найти цитируемый пост)
Видимо, я не достаточно точно описал назначение. девайс предназначен для мониторинга коррозионного состояния опор контактной сети. То есть, человек идет и измеряет нужные опоры с прибором. Номер опоры в пределах олной дороги(железной) не уникален, для каждого отделения дороги опоры нумеруются по-разному, поэтому для нахождения нужной опоры пользователь должен будет ввести отделение дороги, дистанцию и перегон, на котором находится данная опора. И для статистики нужны все записи, поэтому запись по изменению не подойдет

Добавлено через 1 минуту и 59 секунд
То есть, эти данные для каждой опоры будут уникальны 


smile  нифига не понял. но могу сказать одно - внести инфу можно и после опроса. камрад то что ты хочешь сделать - это реально - но очень геморно - прийдется строить свою событийную модель с ожиданиями и синхронизацией потоков опроса девайса и действий юзверя. 

Автор: Severyanin 17.11.2008, 10:10
А как сделать проще?

Автор: mrbrooks 17.11.2008, 10:29
Цитата(Severyanin @  17.11.2008,  10:10 Найти цитируемый пост)
А как сделать проще?

как писал я и REZiaMIX  smile 

Автор: Severyanin 17.11.2008, 10:33
на второй раз прочтения постов понял. Спасибо. как заработает - отпишусь))). или задам еще вопросы

Добавлено через 2 минуты и 20 секунд
но еще вопрос. пользователь тоже все это в цикле заполнять будет, и там также надо будет ждать, пока пользователь заполнит все поля формы перед следующей итерацией

Автор: mrbrooks 17.11.2008, 11:38
Цитата(Severyanin @  17.11.2008,  10:33 Найти цитируемый пост)
но еще вопрос. пользователь тоже все это в цикле заполнять будет, и там также надо будет ждать, пока пользователь заполнит все поля формы перед следующей итерацией 

ага. для это го собственно можно использовать события и функции ожидания этих событий

Автор: Severyanin 17.11.2008, 12:07
а как организовать этот фокус? можно пример кода? я, конечно, понимаю, что надо описать в хэндле событие закрытия второй формы и потом ждкть waitForSingleObject, но можно пример небольшой?

Автор: YanTsys 17.11.2008, 12:39
Штрихкоды на опорах поставить не думали ? smile

Человек таскает с собой не только прибор но еще и ноутбук с программой?

У вас есть план расположения опор? Маршрут движения человека ведь заранее известен?
Перед тем как идти измерять заносите в программу по плану расположения опор все их номера и характеристики что бы на месте оставалось только нажать кнопочку "Следующая опора" после чего человек сверяет номер реальной опоры и высветившейся на дисплее и идет дальше smile А в программе ко всем сохраняющимся записям будет дописываться уникальный регистрационный номер заранее зарегистрированной опоры smile
Плюс к тому если каждая опора будет выводится из хранящегося списка то можно вывести измеряющему человеку дополнительную информацию типа "на данном участке опоры меняются более часто чем на других, необходимо произвести дополнительное обследование результаты заполнить в примечании", или "результаты измерений резко отличаются от измерений произведенных в прошлый раз, проверьте настройки прибора"

Автор: Severyanin 17.11.2008, 12:46
Народ, мое дело только программу написать, остальное - не моя забота))) киньте примерчик с событием плиз

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)