in reply to Re^4: Unable to capture mouse events in Win32::Console
in thread Unable to capture mouse events in Win32::Console

I can filter out mouse movement events, but then there would be a huge amount of CPU time spent in doing so.

There wouldn't. To begin with, Input blocks, you don't have to GetEvents at all, nor sleep/usleep. Next, if "event" is generated (or "message" is sent to application) in case of mouse motion, say, 20* times per second until motion ceases, it's "huge" amount of messages for a human, but your computer/CPU would hardly notice it has spent any time doing so and processing these messages per your instructions -- unless you yourself, as programmer, inadvertently put something time consuming/blocking into event loop.

Have a look at e.g. Term::Choose (which works on top of guess-what Perl module when on Windows), where mouse motion is simply discarded ("filtered") every time, if I'm reading the source correctly. Plus, by the way, I was going to suggest it as kind of higher-level/friendlier/cross-platform/feature-rich text-mode UI toolkit instead of you rolling out your own event loop application with Win32::Console.

(*) I'm sorry, I said "20", but can't, off the top of my hat, provide the exact figure (which probably depends on speed/distance) without googling.

  • Comment on Re^5: Unable to capture mouse events in Win32::Console

Replies are listed 'Best First'.
Re^6: Unable to capture mouse events in Win32::Console
by fireblood (Scribe) on Apr 26, 2022 at 20:15 UTC

    Sounds very reasonable. The reason I had the GetEvents method first before invoking the GetInfo method is that I believed that because GetEvents returned just a single scalar, that checking it first prior to invoking Input would be more efficient than calling Input, which returns an array of values. But after reading your note, I guess that if Input does not have anything to return it does not do all the processing of assigning undefs to all of the fields that it returns.

    Thanks for the link to Term::Choose, it looks very interesting.

Re^6: Unable to capture mouse events in Win32::Console
by etj (Chaplain) on Apr 27, 2022 at 16:18 UTC
    This is some great research!

    By any chance, would you have insights into how to block-wait for OpenGL (1, it's for current PDL::Graphics::TriD) events? Currently it constantly polls since it's using GLUT's glutMainLoopEvent. My googling didn't reveal a better way that was somewhat compatible with that. Yes, it should get moved off OpenGL 1, but there are other priorities first such as the imminent OpenCV interface, and loop-fusion.

      Sorry, etj, I have no OpenGL experience but hope your question will attract better answers, with node accessible through (Google|Super) search.

      Even loops they all "constantly" poll, a block-wait is just some c-code polling for your program