В Wsk_DataArrival сокета читаю данные в глобальный массив GetDat. Затем управление передаётся обработчику таймера напрямую (как обычный вызов процедуры, просто мне там удобно держать кусок кода) tmrGet_Timer, где вызывается процедура, в которой есть DoEvents. И после сего сокет принимает новый пакет UDP, который перезаписывает нужные данные (выходит ошибка из-за отсутствия нужных данных). Вопрос - почему Wsk_DataArrival вызывается повторно, когда предыдущий вызов Wsk_DataArrival не завершился и действительно ли в этом виноват DoEvents?
1а. Если бы не было ошибки, как бы происходило выполнение двух вызовов Wsk_DataArrival - параллельно и они бы нормально завершились?
Второй вопрос - события множества контролов (таймеров, сокетов и др.) выстраиваются в очередь для выполнения (т.е. выполняются последовательно) или же есть такие моменты (события некоторых контролов), когда возможно параллельное выполнение кода (где надо следить за глобальными переменными), если считать, что в моей программе нет ничего особенного вроде параллельных процессов и тому подобного, о коих я ещё и не знаю.