Home > Article > Backend Development > How can I implement non-blocking console input in C for interactive applications?
Non-Blocking Console Input in C
In modern C , non-blocking console input allows for seamless handling of user commands while the program continues to run and output information. This capability is often critical in interactive applications and gaming.
C 11 Solution:
One effective way to implement non-blocking console input is through the use of a separate thread. This approach allows the main program to continue executing while a background thread monitors the console for input. The following code sample demonstrates this approach using C 11:
<code class="cpp">#include <iostream> #include <future> #include <thread> #include <chrono> static std::string getAnswer() { std::string answer; std::cin >> answer; return answer; } int main() { std::chrono::seconds timeout(5); std::cout << "Do you even lift?" << std::endl << std::flush; std::string answer = "maybe"; // default to maybe std::future<std::string> future = std::async(getAnswer); if (future.wait_for(timeout) == std::future_status::ready) answer = future.get(); std::cout << "the answer was: " << answer << std::endl; exit(0); }</code>
Explanation:
In this example, the getAnswer function is responsible for retrieving the user's input. The std::async function launches a separate thread that executes getAnswer and returns a std::future object that can be used to retrieve the result.
The main program sets a timeout of 5 seconds to wait for user input. If the user enters input within this time, the program sets the answer variable to the input. Otherwise, it defaults to "maybe."
This non-blocking input approach allows the program to continue its ongoing computations and output while still responding to user input efficiently. It is a powerful technique for building interactive C applications.
The above is the detailed content of How can I implement non-blocking console input in C for interactive applications?. For more information, please follow other related articles on the PHP Chinese website!