Дело обстоит так: У меня Запускаются 3 процесса, — 2 в TimerQueue и один, — просто WM_TIMER. Первый раз в секунду увеличивает поле с временем у моего класса, второй каждую секунду выводит в ЛистКонтрол то, обновленную информацию, а третий каждые 5 секунд записывает состояние всех компьютеров (это у меня программа администрации клуба) в БД (MS SQL Server). Если работают любые 2 пары процессов, то все ОК, но как только включаю все 3, прога виснет, причем через непонятные промежутки времени, — может повиснуть через 5 секунд, а может и через 50. У меня подозрения, что проблема лежит в совместном доступе к одним и тем же таблицам, но ведь этого быть не должно — (я открываю все RecordSet'ы как CRecordSet::snapshot). Пробовал с помощью Event'ov контролировать состояние каждого процесса, но не помогло... Помогите, плз...
Попадал на аналогичные грабли, правда с DAO-классами. Люди в конференциях объяснили, что MFC-калассы для работы с DAO не полностью поддерживают многопоточность. Посоветовали использовать критические секции для ограничения доступа к базе только одним потоком в единицу времени. Мне вроде помогло. Может тебе тоже попробовать поместить куски кода, работающие с базой в критические секции?
Здравствуйте BigBob, Вы писали:
BB>Попадал на аналогичные грабли, правда с DAO-классами. Люди в конференциях объяснили, что MFC-калассы для работы с DAO не полностью поддерживают многопоточность. Посоветовали использовать критические секции для ограничения доступа к базе только одним потоком в единицу времени. Мне вроде помогло. Может тебе тоже попробовать поместить куски кода, работающие с базой в критические секции?
Спасиба, идея хорошая, теберь осталось найти хороший пример использования ентих секций,- в МСДНе как обычно ничего хорошего нет...
Re[2]: Проблема совместного доступа???
От:
Аноним
Дата:
06.08.02 11:45
Оценка:
Здравствуйте BigBob, Вы писали:
BB>Попадал на аналогичные грабли, правда с DAO-классами. Люди в конференциях объяснили, что MFC-калассы для работы с DAO не полностью поддерживают многопоточность. Посоветовали использовать критические секции для ограничения доступа к базе только одним потоком в единицу времени. Мне вроде помогло. Может тебе тоже попробовать поместить куски кода, работающие с базой в критические секции?
Слушай, разобрался. И помогло! Спасибба, а то я уже второй день на одном месте сижу