Я согласен с TOndrej, что общих объектов должно быть достаточно.
С другой стороны, вы можете использовать мой IPC ( Cromis IPC ), который прекрасно работает внутри сервисов.Он прост в использовании, ориентирован на сообщения, поэтому вам не нужно знать, как работают именованные каналы, и очень быстро.Серверная часть также использует пул потоков, поэтому не нужно ждать обработки чего-либо.Вы можете использовать сценарий «забей и забудь».
Или, если вы считаете, что небольшая редизайн в порядке, вы можете попробовать OmniThreadLibrary, в котором уже встроен весь обмен сообщениями и который предназначен для подобных задач.
РЕДАКТИРОВАТЬ :
Хорошо, возможно, самый чистый путь, без каких-либо изменений, - это иметь общий список объектов, который защищен критической секцией.Рабочий поток добавляет объекты, которые должны быть обработаны в списке.Когда и объект добавлен, рабочий поток сигнализирует о событии.Затем у вас есть поток обработки объекта, который ожидает с помощью WaitForSingleObject этого события.Как только что-то добавляется в список, событие сигнализируется, и поток обработки просто обрабатывает все объекты, которые он находит в списке.Тогда это ждет снова.Все, что вам нужно сделать, это защитить доступ к общему списку.
Упрощенный код будет выглядеть следующим образом:
РАБОЧАЯ РЕЗЬБА
ObjectList.Add(MessageObject);
SetEvent(FEvent);
ОБРАБОТКА РЕЗЬБЫ
while not Terminated do
begin
WaitForSingleObjest(FEvent, INFINITE);
// process all the objects
end;