17 / 19 / 4
Регистрация: 03.02.2010
Сообщений: 262

Перенос кода на версию 1.82

06.08.2023, 12:33. Показов 9608. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток коллеги! Безуспешно пытаюсь перенести код на новую версию boost 1.82, в версии 1.60 код работал...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <boost/asio/serial_port.hpp> 
#include <boost/asio/deadline_timer.hpp>
#include <boost/asio/placeholders.hpp>
#include <boost/asio/io_service.hpp>
#include <boost/asio/io_context.hpp>
#include <boost/bind.hpp>
 
class blocking_reader
{
    boost::asio::serial_port& port;
    size_t timeout;
    char c;
    boost::asio::deadline_timer timer;
    bool read_error;
 
    // Called when an async read completes or has been cancelled
    void read_complete(const boost::system::error_code& error,
        size_t bytes_transferred) {     
 
            read_error = (error || bytes_transferred == 0);
 
            // Read has finished, so cancel the
            // timer.
            timer.cancel();
    }
 
    // Called when the timer's deadline expires.
    void time_out(const boost::system::error_code& error) {
 
        // Was the timeout was cancelled?
        if (error) {
            // yes
            return;
        }
 
        // no, we have timed out, so kill
        // the read operation
        // The read callback will be called
        // with an error
        port.cancel();
    }
 
public:
 
    // Constructs a blocking reader, pass in an open serial_port and
    // a timeout in milliseconds.
    blocking_reader(boost::asio::serial_port& port, size_t timeout) :
      port(port), timeout(timeout),
          timer(port.get_io_service()),
          read_error(true) {
 
      }
 
      // Reads a character or times out
      // returns false if the read times out
      bool read_char(char& val) {
 
          val = c = '\0';
 
          // After a timeout & cancel it seems we need
          // to do a reset for subsequent reads to work.
          port.get_io_service().reset();
 
          // Asynchronously read 1 character.
          boost::asio::async_read(port, boost::asio::buffer(&c, 1), 
              boost::bind(&blocking_reader::read_complete, 
              this, 
              boost::asio::placeholders::error, 
              boost::asio::placeholders::bytes_transferred)); 
 
          // Setup a deadline time to implement our timeout.
          timer.expires_from_now(boost::posix_time::milliseconds(timeout));
          timer.async_wait(boost::bind(&blocking_reader::time_out,
              this, boost::asio::placeholders::error));
 
          // This will block until a character is read
          // or until the it is cancelled.
          port.get_io_service().run();
          
 
          if (!read_error)
              val = c;
 
          return !read_error;
      }
};
Подскажите пожалуйста где теперь находятся следующие функции (в новой версии они больше не доступны):

timer(port.get_io_service())
port.get_io_service().reset();
boost::asio::async_read(port, boost::asio::buffer(&c, 1)
port.get_io_service().run();
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.08.2023, 12:33
Ответы с готовыми решениями:

Перенос кода в новую версию
Доброго времени суток. Поставлена задача перенести лабораторные работы с матлаба 2012 в матлаб 2017, просто так они не работают или...

Перенос проекта на другую версию
Всем привет! Такая проблема: есть проект, но он сделан на версии 24.6.1. Открыть его не получается ни с какой версии. (ссылку на гит...

Перенос проекта на новую версию
Подскажите пожалуйста как перенести проект с одной версии RAd Studio на другую. К примеру с Xe7 на Seattle 10. Выдает кучу ошибок типа ...

4
 Аватар для zayats80888
6343 / 3514 / 1427
Регистрация: 07.02.2019
Сообщений: 8,979
06.08.2023, 16:02
al072, чтоб переделать нормально, ножен контекст, в котором используется этот класс.
По сабжу:

Цитата Сообщение от al072 Посмотреть сообщение
port.get_io_service()
C++
1
port.get_executor().context()
но это не совсем то же самое.

Цитата Сообщение от al072 Посмотреть сообщение
boost::asio::async_read
C++
1
#include <boost/asio/read.hpp>
Цитата Сообщение от al072 Посмотреть сообщение
reset()
run()
Это нужно делать в вызывающем коде, который управляет асинхронным контекстом.
1
17 / 19 / 4
Регистрация: 03.02.2010
Сообщений: 262
06.08.2023, 16:10  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Это нужно делать в вызывающем коде, который управляет асинхронным контекстом.
Большое спасибо за ответ, последнее пояснение не совсем понял, можете подробней объяснить как вызвать методы Run() и Reset()?
0
 Аватар для zayats80888
6343 / 3514 / 1427
Регистрация: 07.02.2019
Сообщений: 8,979
06.08.2023, 16:20
Лучший ответ Сообщение было отмечено al072 как решение

Решение

Цитата Сообщение от al072 Посмотреть сообщение
можете подробней объяснить как вызвать методы Run() и Reset()?
Второй вызывать смысла не вижу, а как и где - я же говорю, нужно видеть весь контекст использования этого класса.

Но можете попробовать тупо адаптировать под 1.82, не меняя окружения.
Вот, например, компилируется, но будет ли работать и работать корректно, я не знаю:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <boost/asio/serial_port.hpp> 
#include <boost/asio/deadline_timer.hpp>
#include <boost/asio/placeholders.hpp>
#include <boost/asio/io_service.hpp>
#include <boost/asio/io_context.hpp>
#include <boost/bind/bind.hpp>
#include <boost/asio/read.hpp>
 
class blocking_reader
{
    boost::asio::serial_port& port;
    size_t timeout;
    char c;
    boost::asio::deadline_timer timer;
    bool read_error;
 
    // Called when an async read completes or has been cancelled
    void read_complete(const boost::system::error_code& error,
        size_t bytes_transferred) {     
 
            read_error = (error || bytes_transferred == 0);
 
            // Read has finished, so cancel the
            // timer.
            timer.cancel();
    }
 
    // Called when the timer's deadline expires.
    void time_out(const boost::system::error_code& error) {
 
        // Was the timeout was cancelled?
        if (error) {
            // yes
            return;
        }
 
        // no, we have timed out, so kill
        // the read operation
        // The read callback will be called
        // with an error
        port.cancel();
    }
 
public:
 
    // Constructs a blocking reader, pass in an open serial_port and
    // a timeout in milliseconds.
    blocking_reader(boost::asio::serial_port& port, size_t timeout) :
      port(port), timeout(timeout),
          timer(port.get_executor()),
          read_error(true) {
 
      }
 
      // Reads a character or times out
      // returns false if the read times out
      bool read_char(char& val) {
 
          val = c = '\0';
 
          // After a timeout & cancel it seems we need
          // to do a reset for subsequent reads to work.
          static_cast<boost::asio::io_service&>(port.get_executor().context()).reset();
 
          // Asynchronously read 1 character.
          boost::asio::async_read(port, boost::asio::buffer(&c, 1), 
              boost::bind(&blocking_reader::read_complete, 
              this, 
              boost::asio::placeholders::error, 
              boost::asio::placeholders::bytes_transferred)); 
 
          // Setup a deadline time to implement our timeout.
          timer.expires_from_now(boost::posix_time::milliseconds(timeout));
          timer.async_wait(boost::bind(&blocking_reader::time_out,
              this, boost::asio::placeholders::error));
 
          // This will block until a character is read
          // or until the it is cancelled.
          static_cast<boost::asio::io_service&>(port.get_executor().context()).run();
          
 
          if (!read_error)
              val = c;
 
          return !read_error;
      }
};
1
17 / 19 / 4
Регистрация: 03.02.2010
Сообщений: 262
06.08.2023, 18:18  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Вот, например, компилируется, но будет ли работать и работать корректно, я не знаю:
Спасибо большое я потестирую и отпишусь

Добавлено через 1 час 26 минут
Еще раз благодарю, работает))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.08.2023, 18:18
Помогаю со студенческими работами здесь

Перенос проекта в другую версию Embarcadero
Сабж - сделал проекта в Embarcadero 10 Rio, установленной на Win 7 64. Понадобилось продолжить работу на другом компьютере, с Win 10 64, на...

Перенос проекта на более новую версию IDE
Хочется заранее задать вопрос - как правильно, и без особых последствий, перенести проект с старой версии на новую версию IDE? Ну что...

Joomla: перенос сайта на новую версию движка
А при переносе сайта на новую версию позиции в выдаче упадут сильно? И на какую версию порекомендуете переходить?

Перенос на новые домен и новую версию движка
Подскажите, люди добрые. Планирую предпринять следующие действия: 1) Перенос сайта с домена &quot;com.ua&quot; на домен...

Перенос баз данных на более новую версию сервера
1. Есть программа Акцент, которая использует базы данных на Microsoft® SQL Server® 2008 R2. (Win 7) 2. Появилась необходимость перенести...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
MVC фреймворк в PHP
Jason-Webb 19.04.2025
Архитектурный паттерн Model-View-Controller (MVC) – это не просто модный термин из мира веб-разработки. Для PHP-программистов это фундаментальный подход к организации кода, который радикально меняет. . .
Dictionary Comprehensions в Python
py-thonny 19.04.2025
Python славится своей выразительностью и лаконичностью, что позволяет писать чистый и понятный код. Среди множества синтаксических конструкций языка особое место занимают словарные включения. . .
Шаблоны и протоколы для создания устойчивых микросервисов
ArchitectMsa 19.04.2025
Микросервисы — архитектурный подход, разбивающий сложные приложения на небольшие, независимые компоненты. Вместо монолитного гиганта, система превращается в созвездие небольших взаимодействующих. . .
Изменяемые и неизменяемые типы в Python
py-thonny 19.04.2025
Python славится своей гибкостью и интуитивной понятностью, а одна из главных его особенностей — это система типов данных. В этом языке все, включая числа, строки, функции и даже классы, является. . .
Интеграция Hangfire с RabbitMQ в проектах C#.NET
stackOverflow 18.04.2025
Разработка современных . NET-приложений часто требует выполнения задач "за кулисами". Это может быть отправка email-уведомлений, генерация отчётов, обработка загруженных файлов или синхронизация. . .
Построение эффективных запросов в микросервисной архитектуре: Стратегии и практики
ArchitectMsa 18.04.2025
Микросервисная архитектура принесла с собой много преимуществ — возможность независимого масштабирования сервисов, технологическую гибкость и четкое разграничение ответственности. Но как часто бывает. . .
Префабы в Unity: Использование, хранение, управление
GameUnited 18.04.2025
Префабы — один из краеугольных элементов разработки игр в Unity, представляющий собой шаблоны объектов, которые можно многократно использовать в различных сценах. Они позволяют создавать составные. . .
RabbitMQ как шина данных в интеграционных решениях на C# (с MassTransit)
stackOverflow 18.04.2025
Современный бизнес опирается на множество специализированных программных систем, каждая из которых заточена под решение конкретных задач. CRM управляет отношениями с клиентами, ERP контролирует. . .
Типы в TypeScript
run.dev 18.04.2025
TypeScript представляет собой мощное расширение JavaScript, которое добавляет статическую типизацию в этот динамический язык. В JavaScript, где переменная может свободно менять тип в процессе. . .
Погружение в Kafka: Концепции и примеры на C# с ASP.NET Core
stackOverflow 18.04.2025
Apache Kafka изменила подход к обработке данных в распределенных системах. Эта платформа потоковой передачи данных выходит далеко за рамки обычной шины сообщений, предлагая мощные возможности,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru