2

我使用 d 编程语言制作了一个小型 opengl 程序。我想做的是让程序从控制台读取输入。我曾尝试使用 readf()、getc() 和其他一些函数。但我的问题是我不希望程序在寻找输入时暂停。

我试图四处寻找解决方案,但找不到任何解决方案。所以如果有人知道如何检查控制台中是否真的写了一些东西,如果是的话,请阅读。或者如果存在从控制台读取的任何函数,但如果没有写入任何内容,则将被忽略。

我主要想知道如何在 d 中执行此操作,但 c++ 的解决方案也可能有用。

4

1 回答 1

3

您需要使用单独的线程。像这样的事情是在 D 中做到这一点的一种方法:

import std.stdio, std.concurrency;

void main()
{
    // Spawn a reader thread to do non-blocking reading.
    auto reader = spawn(()
    {
        // Read console input (blocking).
        auto str = readln();

        // Receive the main thread's TID and reply with the string we read.
        receive((Tid main) { send(main, str); });
    });

    // ... This is where you can do work while the other thread waits for console input ...

    // Let the reader thread know the main thread's TID so it can respond.
    send(reader, thisTid);

    // Receive back the input string.
    receive((string str) { writeln("Got string: ", str); });
}

这会产生一个单独的线程,它会等待控制台输入,而您的主线程可以做其他工作。

于 2012-04-07T17:06:22.630 回答