![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Acer |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 5.9.2007 Где: UA::DN Репутация: нет Всего: 8 |
Есть метод класса. Его работа заключается в выборке данных из базы и записи этих данных в определенное поле класса.
Вот код, который работает:
А вот код, который не работает:
Подскажите, в чем проблема? Почему при добавлении 2-х строк кода в выше приведенную функцию вот эта
возвращает -1 ? --------------------------------------------------------------
|
||||||||
|
|||||||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
такое может быть только в одном случае - если во втором случае перед этим вызывался любой код, который изменил состояние rdbc
приведенный вами код никакой информации не несет - из него лишь можно сделать предположение, что перед вызовом RModuleCore::updateData() был еще один вызов RModuleCore::updateData(), который в else изменил состояние rdbc, и последующий вызов привел к ошибке. |
|||
|
||||
| Acer |
|
||||||||||||||||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 5.9.2007 Где: UA::DN Репутация: нет Всего: 8 |
хм... вроде нигде не должно меняться состояние обьекта rdbc...
Ну вот, смотрите: начну с main:
тут из конфиг файла беру данные о модулях и создаю обьекты для каждого модуля. Затем они добавляются в ws (workspace) Далее после инициализации модулей они живут сами по себе. А именно: в конструкторе класса RModule:
Это Qt. По истечению времени таймера запускается метод класса RModule - updateData() RModule::updateData()
RModuleCore::isConnected()
RODBC::isConnected()
mod_core - это свойство обьекта класса RModule и является экземпляром класса RModuleCore. RModuleCore для каждого модуля запускается в отдельном потоке. При выполнении mod_core->start(); запускается метод run: RModuleCore::run()
После завершения работы метода this->updateData() в классе RModuleCore генерируется сигнал, который оповещает RModule о том, что нужно запустить updateDisplay(); RModuleCore::updateData()
RModule::updateDisplay()
В методе RModule::updateDisplay() берутся данные, которые RModuleCore достал из базы: RModuleCore::getDataAtm()
Данные представляют собой вектор структур(мало полей, так как программа в стадии разработки):
Далее, что касается класса, работающего с базой: RODBC::execQuery
RODBC::exec
RODBC::getRowsCount
RODBC::getCellValue
Это сообщение отредактировал(а) Acer - 4.12.2008, 23:12 |
||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
ээээ
давайте вы просто дебагером пройдетесь и посмотрите все обращения к rdbc, а заодно и сверитесь с документацией по библиотеке, предоставляющий этот объект |
|||
|
||||
| Acer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 5.9.2007 Где: UA::DN Репутация: нет Всего: 8 |
Я сам писал эту библиотеку
|
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
тем более
|
|||
|
||||
| Acer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 5.9.2007 Где: UA::DN Репутация: нет Всего: 8 |
Еще один интересный факт:
Первый запрос проходит нормально, а второй уже возвращает -1 |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
это я и имел ввиду
у вас объект вероятно не детерминирован Это сообщение отредактировал(а) J0ker - 5.12.2008, 00:35 |
|||
|
||||
| Acer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 5.9.2007 Где: UA::DN Репутация: нет Всего: 8 |
Вобщем, проблема в том, что я еще не совсем понимаю многопоточную обработку данных....
Я заменил библиотеку для работы с базами. Но непонятно вот-что: при старте программы все модули коннектятся к базе. Но потом соединение остается только у последнего. Все, кто грузился ранее, теряют связь с базой :( |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |