mscomm oncomm event - PullRequest
       1

mscomm oncomm event

0 голосов
/ 10 марта 2011

Я поддерживаю приложение, связанное с последовательным портом.

В форме имеется 32 элемента управления MSComm (массив элементов управления).

Предположим, что данные поступили на один из com-портов во время работы некоторого другого кода того же потока (например, доступ к базе данных и т. Д.). Будет ли процедура события Oncomm помещена в очередь для выполнения или текущая точка выполнения помещена в очередь, и обработчик события Oncomm будет выполнен?

1 Ответ

1 голос
/ 10 марта 2011

VB6 однопоточный.По сути (за исключением элементов управления ActiveX на секунду) есть только поток GUI.

Он сидит там, ожидая события.Вы получаете данные, поэтому он входит в обработчик событий для вашего элемента управления MSComm и начинает делать некоторый доступ к базе данных.Блокирует ожидание ответа базы данных.Другой элемент управления MSComm получает данные и запускает событие.Это событие просто находится в очереди событий Windows.Поток GUI должен выйти из обработчика события, прежде чем он сможет обработать другое событие MSComm.

Конечно, в середине обработчика события вы можете вызвать DoEvents.Я настоятельно рекомендую вам делать это редко, если вообще когда-либо.По моему опыту, это источник многих трудных ошибок.

Есть способов поставить в очередь долгосрочную работу базы данных в фоновом потоке (используя вызов в управляемый код .NET, в этомдело).Это позволит вашему коду обработчика событий продолжаться практически сразу, без блокировки, что позволит ему обрабатывать следующее сообщение.Насколько мне известно, нет никакого собственного способа сделать это на VB6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...