20:49

капелюх чарiвника
Здравствуйте, уважаемые сообщники.
Интересует ответ на вопрос о событиях (events) в WinAPI.
Как известно, сигнатура установки события имеет вид
.
Соответственно, событие хватаем где-то в другом потоке с помощью, например,
.
Вопрос такой: как человеческим и максимально простым способом вместе с событием передать какие-то данные?
Например, конкретизируем, пусть необходимо передать указатель

Какие будут идеи?

@темы: Windows, Вопрос

Комментарии
23.11.2010 в 09:49

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
То, что ты хочешь таким образом реализовать называется futures. (один из вариантов реализации можно посмотреть здесь). Именно этот паттерн реализует "возврат результата" из потока. Может быть тебе лучше им воспользоваться, и не городить огород? :)
23.11.2010 в 10:20

капелюх чарiвника
я пока что не начал городить.
и ответ, меня интересующий, относится не столько к проблеме "возврат результата из потока", сколько к проблеме "синхронизация + передача данных".
хорошо, если ты предлагаешь мне использовать boost, в котором я не силён чуть более чем полностью, то как в нём реализовать синхронизированную передачу данных из потока в поток? для общего случая предположим, что потоки существуют в разных процессах.
хотелось бы увидеть по кусочку кода потока отправляющего данные и принимающего.
23.11.2010 в 10:31

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
Ну, буст - не единственная возможная реализация этого механизма. А

хорошо, если ты предлагаешь мне использовать boost, в котором я не силён чуть более чем полностью, то как в нём реализовать синхронизированную передачу данных из потока в поток? для общего случая предположим, что потоки существуют в разных процессах. хотелось бы увидеть по кусочку кода потока отправляющего данные и принимающего.

Из примера (отсюда: https://svn.boost.org/svn/boost/trunk/libs/thread/test/test_futures.cpp)


Выглядит всё достаточно просто.
23.11.2010 в 14:25

капелюх чарiвника

то есть, ожидание будет происходить в этой строке, я правильно понимаю?
23.11.2010 в 15:02

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
Да.
23.11.2010 в 15:07

капелюх чарiвника
хорошо. спасибо.
а если задачу чуть расширить. скажем, отправитель один, а получателей несколько.
будет ли отрабатывать .get() во всех ожидающих потоках?
23.11.2010 в 15:11

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
В случае буста - да, будет.
23.11.2010 в 15:31

капелюх чарiвника
неплохо.
да, надо будет попробовать.

хотя причиной изначального вопроса стало желание разобраться, как сделать подобное на низком уровне. родными средствами WinAPI, например.
так что ответ есть, благодарю за него, но чувство удовлетворённости не наступило =)
23.11.2010 в 16:00

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
так что ответ есть, благодарю за него, но чувство удовлетворённости не наступило =)
Ну, расковыряй потроха - посмотри, как устроено. :)
23.11.2010 в 17:44

капелюх чарiвника
придётся, видимо.
спасибо за наводку ещё раз.