В MDI-frame создается поток, который в свою очередь создает 10 (к примеру) экземпляров некого класса и 10 потоков, каждому из которых передается ссылка на соотв. объект.
Каждый тред слушает данные pipe и при получении таковых пишет данные в главный фрейм (хотел бы писать). Главное окно само "распихивает" данные по child'ам.
Вопрос: как организовать обмен данными между потоками и главным окном. Пробовал передавать хэндл окна. Но в цикле чтения-записи в треде, если до записи вызвать ::SendMessage(hWnd,...), pipe почему-то ломается и в него ничего не пишется.
Ссылку на сам фрейм не могу использовать. Причина:
Сам MainFrm.h содержит включение
#include "PipeThread.h"
Я не могу включить ни в PipeThread.h, ни в PipeThread.cpp инклюд MainFrm.h. Соответственно, не могу ипользовать cast к CMainFrame. Может от незнания
Прошу помощи
Я плохо представляю специфику аппликации, но возможно сработает следующий вариант.
Для каждого потока создается некая структура, через поля которой происходит обмен данными между главным окном и потоками. Главное окно ждет прибытия данных по какому нить событию (Event), соответственно каждый поток ждет ответа по другому событию. То есть каждому потоку соответстввует 2 события. Ну в общем это так, сырая идея, мож есть что и покрасивее. По крайней мере очередь сообщений трогать не надо.
Здравствуйте, BlackHeretic, Вы писали:
BH>Я плохо представляю специфику аппликации, но возможно сработает следующий вариант.
BH>Для каждого потока создается некая структура, через поля которой происходит обмен данными между главным окном и потоками. Главное окно ждет прибытия данных по какому нить событию (Event), соответственно каждый поток ждет ответа по другому событию. То есть каждому потоку соответстввует 2 события. Ну в общем это так, сырая идея, мож есть что и покрасивее. По крайней мере очередь сообщений трогать не надо.
Спасибо. Пока обошелся SendMessage. Моя ошибка была в том, что я проверял Read-Write в дебаге, а тайм-аут операций ввода-вывода по умолчанию был 2 секунды. Соответственно, мне казалось, что SendMessage отрубает pipe