как для boost::asio::serial_port сделать flush?
От: kvser  
Дата: 27.01.10 14:18
Оценка:
Здравствуйте!

как для boost::asio::serial_port сделать flush?
Re: как для boost::asio::serial_port сделать flush?
От: abrec Россия  
Дата: 27.01.10 14:56
Оценка:
Здравствуйте, kvser, Вы писали:

K>Здравствуйте!


K>как для boost::asio::serial_port сделать flush?


flush

1) смещение, сдвиг, выравнивание

2) подавлять (ненужную информацию в памяти)

3) выключать(ся) из работы

4) сбрасывать на диск (содержимое файловых буферов)

что имелось ввиду?
Re[2]: как для boost::asio::serial_port сделать flush?
От: kvser  
Дата: 27.01.10 15:51
Оценка:
Здравствуйте, abrec, Вы писали:

A>что имелось ввиду?


2) подавлять (ненужную информацию в памяти стереть)
Re[3]: как для boost::asio::serial_port сделать flush?
От: abrec Россия  
Дата: 27.01.10 16:01
Оценка:
Здравствуйте, kvser, Вы писали:

K>Здравствуйте, abrec, Вы писали:


A>>что имелось ввиду?


K>2) подавлять (ненужную информацию в памяти стереть)


close() --> open() не помогает?

у меня реинициализировать ( после ошибки, или подвисания ) serial_port получалось только уничтожением старого затем созданием нового объекта serial_port.
Re[4]: как для boost::asio::serial_port сделать flush?
От: kvser  
Дата: 27.01.10 16:05
Оценка:
Здравствуйте, abrec, Вы писали:

K>>2) подавлять (ненужную информацию в памяти стереть)

A>close() --> open() не помогает?
A>у меня реинициализировать ( после ошибки, или подвисания ) serial_port получалось только уничтожением старого затем созданием нового объекта serial_port.

я думаю может так?
serial_port port;
...
{buffered_write_stream<serial_port> streamPort(/*здесь какой-то аргумент, наверно serial_port*/);
streamPort.flush();
}
Re[5]: как для boost::asio::serial_port сделать flush?
От: abrec Россия  
Дата: 27.01.10 16:13
Оценка:
Здравствуйте, kvser, Вы писали:

K>Здравствуйте, abrec, Вы писали:


K>>>2) подавлять (ненужную информацию в памяти стереть)

A>>close() --> open() не помогает?
A>>у меня реинициализировать ( после ошибки, или подвисания ) serial_port получалось только уничтожением старого затем созданием нового объекта serial_port.

K>я думаю может так?

K>
K>serial_port port;
K>...
K>{buffered_write_stream<serial_port> streamPort(/*здесь какой-то аргумент, наверно serial_port*/);
K>streamPort.flush();
K>}
K>


неа. создали serial_port --> открылся файл.
Re[3]: как для boost::asio::serial_port сделать flush?
От: kvser  
Дата: 28.01.10 09:59
Оценка:
Покопался в азио — flush там нет.
Сделал так (для первого приближения):

SerialPort.h
#ifndef SERIALPORT_H
#define SERIALPORT_H

#include <boost/asio/serial_port.hpp>

#if defined(BOOST_ASIO_HAS_SERIAL_PORT)

class SerialPort : public boost::asio::serial_port
{
public:
    SerialPort(boost::asio::io_service & io_service);
    boost::system::error_code flush(boost::system::error_code& ec);
};

#endif //defined(BOOST_ASIO_HAS_SERIAL_PORT)
#endif // SERIALPORT_H


SerialPort.cpp
#include "SerialPort.h"

#if defined(BOOST_ASIO_HAS_SERIAL_PORT)
#   if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__CYGWIN__)
#        define SERIAL_PORT_WIN32
#    endif

#    if defined(SERIAL_PORT_WIN32)
#        include <windows.h>
#    else
#        include <termios.h>
#    endif

SerialPort::SerialPort(boost::asio::io_service & io_service)
    :boost::asio::serial_port(io_service)
{
}

boost::system::error_code SerialPort::flush(boost::system::error_code& ec)
{
    #if defined(SERIAL_PORT_WIN32)
        bool isFlushed = ::PurgeComm(native(),PURGE_RXABORT || PURGE_RXCLEAR || PURGE_TXABORT || PURGE_TXCLEAR);
    #else
        bool isFlushed = !::tcflush(native(), TCIOFLUSH);
    #endif

    if(!isFlushed)
    {
        #if defined(SERIAL_PORT_WIN32)
            ec = boost::system::error_code(::GetLastError(), boost::asio::error::get_system_category());
        #else
            ec = boost::system::error_code(errno, boost::asio::error::get_system_category());
        #endif
        return ec;
    }
    return ec;
}

#endif //defined(BOOST_ASIO_HAS_SERIAL_PORT)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.