Извиняюсь за мое запутанное описание. Вот фрагменты кода.
Серверная сторона:
#define FIFO_FILE "/tmp/fifo"
while (1)
{
char readbuf[25];
FILE *file = fopen(FIFO_FILE, "r");
fgets(readbuf, 25, file);
std::queue<std::string>().swap(msg);
msg.push(readbuf);
while (!feof(file))
{
fgets(readbuf, 25, file);
msg.push(readbuf);
}
std::cout << "message num: " << msg.size() << std::endl;
std::future<void> ret = std::async (std::launch::async, command_process, std::ref(msg), std::ref(binfo));
fclose(file);
std::cout << "messages are being processed!\n";
}
клиентская сторона:
int main(int argc, char *argv[])
{
FILE *fp;
if((fp = fopen(FIFO_FILE, "w")) == NULL) {
perror("fopen \n");
return -1;
}
fputs(argv[1], fp);
fclose(fp);
return 0;
}
После запуска сервера он ожидает fgets. Когда клиент отправляет строку в FIFO, сервер получает строку и сохраняет ее в msg,
затем передать его потоку command_process для обработки, сервер ждет
на fopen для дальнейшего сообщения. ОДНАКО Если клиент попытается отправить сообщение еще раз, оно будет заблокировано при открытии клиента до тех пор, пока поток сервера не завершит обработку, сервер продолжит получать сообщение клиента.
Я ожидаю, что клиент не должен быть заблокирован для отправки сообщения, и сервер должен получить сообщение немедленно, а затем прервать предыдущее сообщение, чтобы обработать новое сообщение.
Kai