tikhonov666
@tikhonov666
iOS, Swift, Objective-C

Вывод информации в консоль, при ожидании ввода с клавиатуры. Возможно?

Собственно ситуация:

Клиент соединился с сервером и блокируется в ожидании ввода с клавиатуры команды.

Сервер, с которым соединился клиент, выполняет какие-то действия и по результатам этих действий может отправить клиенту информацию, которую нужно вывести в консоль сразу же, а может и не отправит. Возможно ли такое реализовать? Может есть даже решение через boost

Пока в голову приходит только одна идея, это сделать дополнительный поток на клиенте. 1 - основной, блокируется при вводе. 2 - ждёт команды от сервера и при её получении выводит её.
  • Вопрос задан
  • 3715 просмотров
Решения вопроса 1
gbg
@gbg Куратор тега Программирование
Любые ответы на любые вопросы
Этот вопрос обсуждался:
Как сдвинуть пользовательский ввод в Си (консоль, многопоточность)?
Как организовать параллельные процессы в С++ ?
Дополню, что это можно сделать без дополнительного потока, при помощи накладываемых (OVERLAPPED) операций, если речь идет о windows.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tikhonov666
@tikhonov666 Автор вопроса
iOS, Swift, Objective-C
Сделал набросок, вроде работает как надо
#include <iostream>
#include <string>
#include <../boost/thread.hpp>
#include <../boost/thread/mutex.hpp>
#include <../boost/bind.hpp>
boost::mutex io_mutex;
void outPut(std::string & p)
{
    sleep(5);
    {
        boost::mutex::scoped_lock lock(io_mutex);
        p+="Qt/Example";
        std::cerr<<std::endl<<p<<":~$ ";
    }
}
int main()
{
    std::string temp, path = "/";
    boost::thread thr1(boost::bind(&outPut,path));
    {
        boost::mutex::scoped_lock lock(io_mutex);
        std::cerr<<"Please";
        sleep(1);
        std::cerr<<" enter your";
        sleep(1);
        std::cerr<<" command>\n";
    }
    std::cerr<<path<<":~$ ";
    std::cin>>temp;
    std::cerr<<temp<<std::endl;
    exit(1);
    return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы