Обмен между тредами, обрабатывающими named pipe и MDI-frame
От: _funt_  
Дата: 25.12.06 09:54
Оценка:
В MDI-frame создается поток, который в свою очередь создает 10 (к примеру) экземпляров некого класса и 10 потоков, каждому из которых передается ссылка на соотв. объект.
Каждый тред слушает данные pipe и при получении таковых пишет данные в главный фрейм (хотел бы писать). Главное окно само "распихивает" данные по child'ам.
Вопрос: как организовать обмен данными между потоками и главным окном. Пробовал передавать хэндл окна. Но в цикле чтения-записи в треде, если до записи вызвать ::SendMessage(hWnd,...), pipe почему-то ломается и в него ничего не пишется.
Ссылку на сам фрейм не могу использовать. Причина:
Сам MainFrm.h содержит включение
#include "PipeThread.h"

Я не могу включить ни в PipeThread.h, ни в PipeThread.cpp инклюд MainFrm.h. Соответственно, не могу ипользовать cast к CMainFrame. Может от незнания

Прошу помощи
Re: Обмен между тредами, обрабатывающими named pipe и MDI-fr
От: BlackHeretic Израиль  
Дата: 25.12.06 10:03
Оценка:
PostMessage не пробовали?
ICQ 156156278
Re[2]: Обмен между тредами, обрабатывающими named pipe и MDI
От: _funt_  
Дата: 25.12.06 10:09
Оценка:
Здравствуйте, BlackHeretic, Вы писали:

BH>PostMessage не пробовали?


Пробовал, работает. Только загвоздка в том, что требуется получить от окна немедленный ответ, что писать в канал.
Re[3]: Обмен между тредами, обрабатывающими named pipe и MDI
От: BlackHeretic Израиль  
Дата: 25.12.06 10:17
Оценка:
Я плохо представляю специфику аппликации, но возможно сработает следующий вариант.
Для каждого потока создается некая структура, через поля которой происходит обмен данными между главным окном и потоками. Главное окно ждет прибытия данных по какому нить событию (Event), соответственно каждый поток ждет ответа по другому событию. То есть каждому потоку соответстввует 2 события. Ну в общем это так, сырая идея, мож есть что и покрасивее. По крайней мере очередь сообщений трогать не надо.
ICQ 156156278
Re[4]: Обмен между тредами, обрабатывающими named pipe и MDI
От: _funt_  
Дата: 25.12.06 11:45
Оценка:
Здравствуйте, BlackHeretic, Вы писали:

BH>Я плохо представляю специфику аппликации, но возможно сработает следующий вариант.

BH>Для каждого потока создается некая структура, через поля которой происходит обмен данными между главным окном и потоками. Главное окно ждет прибытия данных по какому нить событию (Event), соответственно каждый поток ждет ответа по другому событию. То есть каждому потоку соответстввует 2 события. Ну в общем это так, сырая идея, мож есть что и покрасивее. По крайней мере очередь сообщений трогать не надо.

Спасибо. Пока обошелся SendMessage. Моя ошибка была в том, что я проверял Read-Write в дебаге, а тайм-аут операций ввода-вывода по умолчанию был 2 секунды. Соответственно, мне казалось, что SendMessage отрубает pipe
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.