Boost logo

Boost Users :

From: Christopher Pisz (christopherpisz_at_[hidden])
Date: 2019-07-12 05:08:35


It looks like my problems aren't with the timer at all. This listing pretty
much mimicked example 3.
It ends up that my problem is that if you click on a console window in
windows 10, the program ceases execution when it enters "quick edit" mode.
I was not aware of that new behavior and thought the timer was not working.
The program run fine, as is, if you don't touch the mouse.

Sorry, false alarm.

On Thu, Jul 11, 2019 at 7:42 PM Christopher Pisz <christopherpisz_at_[hidden]>
wrote:

> I am trying to perform a task on an interval and I made a POC using
> boost::asio::steady_timer. When I debug it, it only performs the callback
> once and does not fire again. I am not sure what I am doing wrong. Any
> suggestions?
>
> // DoMouseEvents.cpp : This file contains the 'main' function. Program
> execution begins and ends there.
> //
>
> #include <boost/asio.hpp>
> #include "boost/asio/deadline_timer.hpp"
> #include<boost/bind.hpp>
> #include <chrono>
> #include <iostream>
>
> class Pooper
> {
> boost::asio::io_context & m_ioContext;
> boost::asio::steady_timer m_timer;
>
> public:
> Pooper(boost::asio::io_context & ioContext)
> :
> m_ioContext(ioContext)
> , m_timer(boost::asio::steady_timer(ioContext))
> {
> }
>
> void Run()
> {
> m_timer.expires_from_now(std::chrono::seconds(5));
> m_timer.async_wait(boost::bind(&Pooper::OnTimerExpired, this,
> boost::asio::placeholders::error));
> }
>
> void OnTimerExpired(const boost::system::error_code & error)
> {
> if (error.failed())
> {
> std::cerr << "boost error: Failed" << std::endl;
> }
>
> std::cout << "Poop" << std::endl;
>
> try
> {
> // Move the mouse
> int x = 500;
> int y = 500;
> if (!::SetCursorPos(x, y))
> {
> int errorCode = GetLastError();
> std::cerr << "SetCursorPos error: " << errorCode <<
> std::endl;
> }
>
> // Left button down
> x = 65536 * 500;
> y = 65536 * 500;
> ::mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN,
> x, y, NULL, NULL);
>
> // Left button up
> x = 65536 * 500;
> y = 65536 * 500;
> ::mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP,
> x, y, NULL, NULL);
>
> m_timer.expires_from_now(std::chrono::seconds(5));
> m_timer.async_wait(boost::bind(&Pooper::OnTimerExpired,
> this, boost::asio::placeholders::error));
> }
> catch (std::exception &)
> {
> std::cerr << "An exception occured." << std::endl;
> }
> }
> };
>
> int main()
> {
> boost::asio::io_context ioContext;
> auto pooper = Pooper(ioContext);
> pooper.Run();
> ioContext.run();
>
> std::cerr << "Exited..." << std::endl;
> }
>
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net