Comments (7)
Interesting I will take a look into this. I agree that the threads are probably not the best here.
from crossterm.
Is there a reason that async / await would be better? I am intending to use crossterm as a library to wrap Python. Threads seems to be a more cross platform compatible mechanism to achieve concurrency. I could be wrong though, but I'm also not a huge fan of eventloops where languages already provide you safety guarantees with threads...is there really a benefit that I'm not aware of?
from crossterm.
Agreed, bringing in event loops, async await futures might increase the complexity of crossterm. The one thread we have will exist for a little time and will be closed after that. I think it is not much needed to bring more complexity in.
from crossterm.
The main reason for me was if we could avoid thread sleep here and avoid wasting CPU cycles sepcially on laptops.
My thought was that using async/await if there is some sort of mpsc::Receiver
or Streams
then internally it doesn't matter whether it using thread of eventloop sine the consumer of the api wouldn't need to worry about changing the api.
let input_stream = input().read_async_with_threads(); // or input().read_async_witheventloop();
while let Some(inputEvent) = await!(input_stream().next()) {
// do something with inputEvent
}
As for the actual perf I'm not sure which one is better but in terms of battery life I think eventloops are better.
You do bring up a good point where threads are more portable so it does seems good to have that as an option.
We should wait for generators/streams to finalize first.
from crossterm.
Agree that async and await might be better however it is does not have good support yet in rust. If we want to use async await need to use Tokio/futures or something which I like to stay far a way from with crossterm. Maybe 'awaiting' for rust to introduce async and await is the best idea here.
from crossterm.
I agree we should wait for rust to stabilize async await first.
from crossterm.
This could be closed, we stick with threads, #79 is fixed which kind of relates to this.
from crossterm.
Related Issues (20)
- Surrogate pairs are ignored on Windows Terminal HOT 1
- Document the feature `use-dev-tty` on `crossterm::event::{poll, read}` HOT 1
- Event::Mouse doesn't capture modifiers in zellij HOT 1
- Support for sending ansi special characters to terminal
- `event::read` incorrectly returns `Esc` key press event while scrolling the mouse wheel HOT 2
- Padding when trying to fill whole terminal. HOT 1
- Terminal settings do not get restored on exit when using bash HOT 1
- Differentiate between keyboard/numpad chars
- Mac doesnt report Shift or Ctrl with enter key HOT 3
- iTerm2 image protocol for vscode
- Support OSC 52 for clipboard interraction HOT 1
- Support win32-input-mode
- `crossterm::event::poll` function fails on macOS with a timeout larger than 100 million seconds
- serde support for Attributes
- add support for win32-input-mode
- Synchronized Update doesn't work on Windows
- Support Pixel Coordinates in Mouse Events HOT 1
- Macros to reduce the syntactic burden of parsing events HOT 4
- Mouse down event isn't registered when it happened shortly after another click (double click)
- Document buffering behavior for events
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from crossterm.