Desiring bool any_key_pressed()
Daren Scot Wilson
darenw at darenscotwilson.com
Fri Mar 3 03:38:56 UTC 2023
Here is a very simple version of the program I'm working on. Is
there a way to write is_any_key_pressed() that doesn't block,
doesn't require the Enter key, and doesn't require dragging in
any complex libraries or dealing with low-level stuff like
ioctl()? Is there nothing in Phobos that provides the needed
functionality?
I won't go into the details, but I tried threading, putting the
getchar() in a separate thread that sets a global bool
g_keypressed variable. It was a disaster. Maybe there's a right
way to use threading? I am not talented at threads.
```
import core.thread;
import core.time;
import std.stdio;
import std.conv;
void light_on() {
write("on "); stdout.flush;
}
void light_off() {
write("off "); stdout.flush;
}
void wait() {
Duration dur = dur!("seconds")( to!int(1) );
Thread.sleep(dur);
}
bool is_any_key_pressed() {
getchar(); // nope, requires Enter key to be pressed, and is
blocking
return true;
}
void main(string[] args)
{
while (true) {
light_on();
wait();
light_off();
wait();
if (is_any_key_pressed()) {
break;
}
}
}
```
More information about the Digitalmars-d-learn
mailing list