Синхронизация данных на Vb
В C++ известно как синхронизировать данные, там много для этого средств, а вот в VB как сделать ?
например: есть глобальные данные, в какой то момент времени с этими данными работает таймер, а в кокой то момент функция, вызываемая по событию (ну, короче говоря тоже в случайный момент времени). Не возникнет ли в такой ситуации момент, когда данные могут быть повреждены?
Т.о. под словами "есть глобальные данные" следует понимать глобальную переменную - т.е. публичную переменную объявленную на уровне модуля, соотв. какие могут возникать проблемы при обращении к переменной?:roll: тем более что таймер, вернее событие от таймера обрабатывается системой, так что уже система разберется кто в каком порядке пришел/ушел :)
тут помойму только единств. вариант который можно рассматривать, так это когда у тебя 2 потока одновременно работает, но это хоть через VB и реализуется, пишется все равно практически на winAPI, VB используется только за спасибо, за то что может запускать чужие функции из Dll
Хотя сейчас сам задумался. Например если писать на С++. Есть класс, есть у него какие-то переменные, есть функции, работающие с ними, и в классе есть таймер, который тоже с этими переменными работает. Если я буду запускать нить, то надо организовывать синхронизацию (критические секции и т.д.), а вот если таймер с ними работает.
Таймер же тоже своего рода поток?
Таймер в 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 преобразует эти прерывания в регулярные , структурированные , последовательные сообщения .
шпасиба за развернутй ответ :-)