从控制台读取而不暂停程序

时间:2012-04-07 17:00:41

标签: console d

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

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

我主要想知道如何在d中做到这一点,但c ++的解决方案也很有用。

1 个答案:

答案 0 :(得分: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); });
}

这会生成一个单独的线程,当主线程可以执行其他工作时,它会使控制台输入等待。