4
Copyright (c) 2021 МГТУ им. Н.Э. Баумана, кафедра ИУ-6, Михаил Фетисов,
6
https://bmstu.codes/lsx/simodo
9
#include "simodo/messaging/InterprocessCommunication.h"
10
#include "simodo/inout/convert/functions.h"
16
#include <condition_variable>
18
using namespace simodo;
19
using namespace std::chrono_literals;
21
int main(int argc, char *argv[])
24
std::cout << "Не задано имя командного файла" << std::endl;
29
std::cout << "Не задано имя процесса" << std::endl;
33
std::string cmd = argv[1];
39
in = new std::ifstream(cmd);
42
std::cout << "Ошибка при открытии командного файла" << std::endl;
47
std::string process = argv[2];
48
std::vector<std::string> arguments(argv + 3, argv + argc);
50
messaging::InterprocessCommunication ipc(process, arguments);
52
bool completion_flag = false;
53
std::condition_variable completion_condition;
55
bool ok = ipc.open([&](std::string & s) {
56
std::cout << s << std::endl;
57
if (s == "The work is completed") {
58
completion_flag = true;
59
completion_condition.notify_all();
64
std::cout << "Ошибка при открытии канала связи: " << ipc.last_error() << std::endl;
69
while(std::getline(*in, line) && !line.empty())
72
std::mutex completion_mutex;
73
std::unique_lock<std::mutex> locker(completion_mutex);
75
if (!completion_condition.wait_for(locker, 5000ms, [&]{ return completion_flag; })) {
77
std::cout << "Таймаут в канале" << std::endl;
83
if (!ipc.last_error().empty()) {
84
std::cout << "Ошибка канала связи: " << ipc.last_error() << std::endl;