Я пытаюсь прочитать события от демона acpi. Я хочу знать, когда кнопка питания нажата и на основе событий асинхронного материала.
Знаете ли вы лучший способ сделать это без ACPI?
Мой текущий пример кода (кстати, работает способ синхронизации):
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <boost/asio.hpp>
#include <thread>
#include <chrono>
using boost::asio::local::stream_protocol;
using namespace std; // For strlen.
enum { max_length = 1024 };
boost::asio::streambuf response;
void handle_read_content(const boost::system::error_code& err, std::size_t bytes_transferred)
{
std::cout << "handle_read_content" << std::endl;
if (!err)
{
// Write all of the data that has been read so far.
std::cout << &response;
}
else if (err != boost::asio::error::eof)
{
std::cout << "Error: " << err << "\n";
}
}
int main(int argc, char* argv[])
{
try
{
boost::asio::io_service io_service;
stream_protocol::socket s(io_service);
stream_protocol::endpoint ep("/run/acpid.socket");
s.connect(ep);
std::cout << "Set the async_read" << std::endl;
boost::asio::async_read(s, response,
boost::asio::transfer_all(),
handle_read_content);
std::cout << "Sart the io_service" << std::endl;
io_service.run();
}
catch (std::exception& e)
{
std::cerr << "Exception: " << e.what() << "\n";
}
//do not quit the application
for(;;) {
std::this_thread::sleep_for(std::chrono::seconds(1));
}
return 0;
}
Handle_read_content никогда не вызывается:
Set the async_read
Start the io_service
Но acpi_listen показывает правильный вывод:
acpi_listen
PNP0C14:01 000000d0 00000000
У вас есть подсказки, идеи или можете указать мне правильное решение?
Спасибо в любом случае и пока
Darian
Задача ещё не решена.
Других решений пока нет …