События между числом потоков c ++ - PullRequest
2 голосов
/ 04 января 2012

Если я хочу, чтобы поток A принимал свои пакеты и обрабатывал их, а какой-то поток B мог бы в какой-то момент изменить IP-адрес сокета.

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

Какие-либо предложения?пожалуйста, это очень важно для меня.

Ответы [ 2 ]

0 голосов
/ 04 января 2012

Фактически, я сделаю свой комментарий ответом:

Создайте / запустите другой поток. Экземпляр, передав ему новый IP / порт.Установите какой-либо флаг в старом потоке A, приказывая выйти из него и очистить его, если и когда он когда-нибудь проснется.

Если вы хотите немного разбираться с вещами или часто выполняете эту операцию «изменения сокета»закройте прослушивающий сокет в старом потоке A - вызов вызова accept () завершится с некоторым исключением или ошибкой, и старый поток A сможет очистить себя и умереть.

0 голосов
/ 04 января 2012

Вы, вероятно, хотите рабочий процесс, такой как:

// thread A
// receive packets on initial address
WaitForSingleObject(event, INFINITE); // wait for address change
// receive packets on the new address

и

// thread B
// do some work
// change IP address
SetEvent(event); // signal A to start receiving on the new address
...