Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Синхронизация данных на Vb

2.2K
01 февраля 2005 года
VBuser
25 / / 05.09.2003
Такой вот вопрос возник.
В C++ известно как синхронизировать данные, там много для этого средств, а вот в VB как сделать ?

например: есть глобальные данные, в какой то момент времени с этими данными работает таймер, а в кокой то момент функция, вызываемая по событию (ну, короче говоря тоже в случайный момент времени). Не возникнет ли в такой ситуации момент, когда данные могут быть повреждены?
258
01 февраля 2005 года
SergeySV
1.5K / / 19.03.2003
В VB у тебя по умолч. нет возможности напрямую работать с памятью (если не считать некоторых скрытых способов), поэтому если ты не используешь какие-нибудь winApi GlobalAlloc и т.д. то у тебя остается только один способ работать с памятью - это твои переменные (типовые или объектные).

Т.о. под словами "есть глобальные данные" следует понимать глобальную переменную - т.е. публичную переменную объявленную на уровне модуля, соотв. какие могут возникать проблемы при обращении к переменной?:roll: тем более что таймер, вернее событие от таймера обрабатывается системой, так что уже система разберется кто в каком порядке пришел/ушел :)

тут помойму только единств. вариант который можно рассматривать, так это когда у тебя 2 потока одновременно работает, но это хоть через VB и реализуется, пишется все равно практически на winAPI, VB используется только за спасибо, за то что может запускать чужие функции из Dll
2.2K
01 февраля 2005 года
VBuser
25 / / 05.09.2003
в принципе да, API я не использую, и потоки не запускаю, но просто у меня такое подозрение, что таймер сам выступает в роли потока, поэтому и появился вопрос о синхронизации.

Хотя сейчас сам задумался. Например если писать на С++. Есть класс, есть у него какие-то переменные, есть функции, работающие с ними, и в классе есть таймер, который тоже с этими переменными работает. Если я буду запускать нить, то надо организовывать синхронизацию (критические секции и т.д.), а вот если таймер с ними работает.
Таймер же тоже своего рода поток?
258
02 февраля 2005 года
SergeySV
1.5K / / 19.03.2003
Вот выдержка из Петзольда из главы о таймерах:

Таймер в Windows является относительно простым расширением таймерной логики , встроенной в аппаратуру PC и
ROM BIOS. ROM BIOS компьютера инициализирует микросхему таймера так , чтобы она генерировала аппаратное
прерывание . Это прерывание иногда называют " таймера ". Эти прерывания генерируются каждые 54.925
миллисекунды или примерно 1 8,2 раза в секунду . Некоторые программы , написанные для MS-DOS, сами
обрабатывают это аппаратное прерывание для реализации часов и таймеров .

В программах , сделанных для Windows, так не делается . Windows сама обрабатывает аппаратные прерывания и
приложения их не получают . Для каждой программы , где в данный момент установлен таймер , Windows
обрабатывает таймерное прерывание путем уменьшения на 1 значения счетчика , изначально переданного вызовом
функции SetTimer. Когда это значение становится равным 0, Windows помещает сообщение WM_TIMER в очередь
сообщений соответствующего приложения и восстанавливает начальное значение счетчика .

Поскольку приложения Windows получают сообщения WM_TIMER из обычной очереди сообщений , вам не нужно
беспокоится о том , что ваша программа во время работы будет "прервана" внезапным сообщением WM_TIMER. В
этом смысле таймер похож на клавиатуру и мышь : драйвер обрабатывает асинхронные аппаратные прерывания , а
Windows преобразует эти прерывания в регулярные , структурированные , последовательные сообщения .
2.2K
02 февраля 2005 года
VBuser
25 / / 05.09.2003
шпасиба за развернутй ответ :-)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог