Требование состоит в том, чтобы иметь возможность общаться в чате, например, между двумя консольными приложениями в одном и том же окне Windows. Я реализовал это с помощью именованных каналов, реализуя функции отправителя и получателя в каждом приложении.
Я хочу попробовать ту же функциональность, но с использованием файлов с отображением памяти (хотя я думаю, что это не идеально для общения типа «чат»).
Для простоты предположим, что сообщения чата — это просто короткие строки.
Вот что я имею в виду:
Одно приложение позаботится о создании мьютекса и файла отображения памяти. Назовите его мастером.
В каждом приложении мы поддерживаем два потока, один из которых отвечает за ввод данных пользователем и запись в файл, а другой отвечает за периодическую проверку наличия чего-либо для чтения.
Итак, всего четыре потока, каждый из которых управляется мьютексом для доступа к файлу.
В файле, я думаю, у обоих должен быть свой «раздел». скажем, первая половина размера файла предназначена для основного приложения, а другая половина - для второго приложения.
Поэтому, когда пользователь вводит строку текста в главном приложении, поток обращается к своей половине файла и пытается добавить новый текст после последней новой строки.
Когда приложение считывает свой раздел файла для текста, если он есть, приложение считывает его и очищает свой раздел.
Правилен ли этот подход? Другой подход заключается в том, чтобы как-то пометить сообщение идентификатором источника, чтобы читатель знал, что нужно игнорировать сообщения, написанные им самим. Но я чувствую, что это ненужный синтаксический анализ строк.
Кроме того, помимо того, что каждый поток чтения периодически пытается прочитать свой раздел файла, чтобы увидеть, есть ли новые данные, можете ли вы предложить какой-либо механизм уведомления? Типа обработки событий? Поток чтения будет искать новые сообщения только в том случае, если он получит какое-либо уведомление о событии.
есть идеи?