В каком потоке обрабатывается обработка события объекта? - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть класс, созданный для работы в качестве потока.

В этом классе я создаю объект.У этого объекта есть событие, которое выполняет обратный вызов метода, созданного в моем классе потока.

Итак, мой основной поток приложения / GUI создает этот поток и запускает его.

На этом этапемой основной поток GUI бездействует (в ожидании событий клавиатуры), а метод execute моего потока находится в бесконечном цикле (ожидает завершения).

Затем созданный объект обнаруживает что-то, вызывая событие, которое вызываетвернуться к методу классов потоков.

Тогда возникает вопрос, в каком потоке / процессе выполняется этот метод? Мой основной поток приложения (& обработчик GUI)?Или поток, который я запустил, который создал объект, который вызвал событие / обратный вызов?

Я предполагаю, что основной поток приложения прерван.Это правильно?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2011

Здесь нет никакой магии, обработчик событий просто запускается в том же потоке, что и код, вызвавший событие. Что неизменно хлопотно, когда вы хотите, чтобы обработчик событий обновлял пользовательский интерфейс, это недопустимо делать из любого потока, кроме того, который создал объекты пользовательского интерфейса.

Вам придется перенаправить вызов из рабочего потока в поток пользовательского интерфейса. Это всегда поддерживается любой библиотекой классов, которую вы используете для реализации пользовательского интерфейса. Вы не сказали, это пахнет Winforms, в этом случае вы используете Control :: BeginInvoke (). Если это сырая Windows, тогда вы используете PostMessage (). Etcetera.

0 голосов
/ 07 декабря 2011

Обратный вызов выполняется в потоке, который ожидает события и вызывает обратный вызов. В данном случае это ваш рабочий поток.

Ваш основной поток (поток с графическим интерфейсом) не прерывается, не считая прерывания ОС для выполнения потенциального переключения контекста.

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