хм, вроде похоже на то что надо, а как создать очередь сообщений? честно говоря я в этом полный нуль, можно кусок кода изложить?
В двух словах: как передать сообщение из одного потока в другой не блокируя выполнение первого?
Например, есть цикл, в котором идет обработка данных, по мере обработки возникают события, в обработчиках которых нужно сделать некоторые операции. Однако первый цикл выполняется с частотой 100мсек и нежелательно что бы обработка событий влияла на частоту исполнения первого потока, поэтому как по мне проще во втором потоке обрабатывать.
В QNX все очень просто, есть MsgSend и MsgReceive/MsgReply и неблокирующие пульсы, а как винде быть? Под винду мало чего многопоточного писал. Или ткните где читнуть?
Из той же оперы: как запустить/обрабатывать таймер в отдельном потоке?
#include <windows.h>
int WINAPI WinMain (HINSTANCE hThisInstance
, HINSTANCE hPrevInstance
, LPSTR lpszArgument
, int nFunsterStil) {
MSG messages;
while (GetMessage(&messages, NULL, 0, 0)) {
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
}
так отлично работает в QNX и возможно сработает в POSIXе.
В винде все не как у людей )
Блять, начинается... В Винде все тоже самое, только названия функций другие.
Это называется "обвинение других в своём невежестве".
Ну да. Чуваку не хватает сообразительности почитать Петзольда для начала, но уже заранее "ваша винда говно, а вот QNX аааааа"
ИМХО для задач ТС скорее Рихтера надо читать. Петзольд вроде как про user / GDI больше писал, в "глубины глубин" ядра, в т.ч. синхронизацию потоков он вроде бы не вдавался.
Ну и потом... QNX - это ОС реального времени, а Windows - нет.
мы про message loop говорим или где? петзольд как раз и писал про основы основ как педалить под винду
Например, есть цикл, в котором идет обработка данных, по мере обработки возникают события, в обработчиках которых нужно сделать некоторые операции. Однако первый цикл выполняется с частотой 100мсек и нежелательно что бы обработка событий влияла на частоту исполнения первого потока, поэтому как по мне проще во втором потоке обрабатывать.
В QNX все очень просто, есть MsgSend и MsgReceive/MsgReply и неблокирующие пульсы, а как винде быть? Под винду мало чего многопоточного писал. Или ткните где читнуть?
Ты знаешь, про PostThreadMessage и про то, что очередь сообщений - она у потока, а не у окна, я узнал гораздо позже прочтения Петзольда. Не вдавался AFAIR он в такие тонкости...
А городить скрытые окна для обмена сообщениями - ИМХО soo Windows 95, некомильфо, короче
о, гуру кодинга под виндовс как всегда начали бросаться какашками (ну вы поняли о ком я). вы такие умные вещи говорите, я уже готов на вас молиться. вы просто Бог.
а если по теме, вместо язвительных сообщений можно было бы просто написать какую книгу почитать. и где в моих сообщениях вы увидели что "windows говно" как вы изволили выразиться? то что она другая это не значит что говно.
о, гуру кодинга под виндовс как всегда начали бросаться какашками (ну вы поняли о ком я). вы такие умные вещи говорите, я уже готов на вас молиться. вы просто Бог.
а если по теме, вместо язвительных сообщений можно было бы просто написать какую книгу почитать. и где в моих сообщениях вы увидели что "windows говно" как вы изволили выразиться? то что она другая это не значит что говно.
а конкретнее что читать? ссылкой поделишься или точным названием?Тільки зареєстровані користувачі бачать весь контент у цьому розділі. Главы 9-10.
Для общей эрудиции (чтобы прекратить твои жалобные стенания про "не все как у людей") читаешь описание функций SendMessage и PostMessage, осознаешь разницу. Одна из них блокирующая, другая нет. А в применении к тредам так еще проще - там только Post:В двух словах: как передать сообщение из одного потока в другой не блокируя выполнение первого?
The PostThreadMessage function posts a message to the message queue of the specified thread. It returns without waiting for the thread to process the message.
Точно также как и "не в отдельном потоке". SetTimer(). Обрабатывать - или окошко создай пустое и невидимое или читай про TimerProc().Из той же оперы: как запустить/обрабатывать таймер в отдельном потоке?
о, гуру кодинга под виндовс как всегда начали бросаться какашками (ну вы поняли о ком я). вы такие умные вещи говорите, я уже готов на вас молиться. вы просто Бог.
Охуеть. Значится если человеку из потока А в поток Б надо передать сообщение - то ему надо для этого создать отдельный поток С и в нем "не торопясь" эти сообщения обрабатывать. Ню-ню...по сути. создай отдельный поток обработки сообщений...
Расскажи пожалуйста, как можно сбросить в очередь СОБЫТИЕ. Это будет новое слово в IPC.и все события / сообщения сбрасывай в его очередь.