2

d プログラミング言語を使用して小さな opengl プログラムを作成しました。私がやろうとしているのは、プログラムがコンソールから入力を読み取れるようにすることです。readf()、getc()、およびその他の関数を使用しようとしました。しかし、私の問題は、入力を探している間にプログラムを一時停止させたくないということです。

解決策を探してみましたが、見つかりませんでした。そのため、何かが実際にコンソールに書き込まれているかどうかを確認する方法を誰かが知っている場合は、それを読んでください。または、コンソールから読み取る関数が存在する場合、何も書き込まれない場合は無視されます。

私は主に d でこれを行う方法を知りたいのですが、c++ のソリューションも役立つ可能性があります。

4

1 に答える 1

3

別のスレッドを使用する必要があります。このようなことは、Dでそれを行う1つの方法です:

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 に答える