2012-04-07 19 views
2

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

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

私は主にdでこれを行う方法を知りたいと思いますが、C++のソリューションも役に立ちます。

答えて

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); }); 
} 

これはあなたのメインスレッドは他の作業を行うことができますしながら、待ってコンソール入力を行う別のスレッドを生成します。

+0

迅速な対応に感謝します。私は今それをテストしています。私がコンパイルしようとすると、concurrency.dファイルのいくつかのエラーについて文句を言いますが、私の設定に問題があると思います。 – user1319341

+0

Linux Mint 12(x86-64)のDMD 2.058で動作します。 –

+0

gdcをコンパイラとして使用し、enumがconcurrency.dで宣言される方法について不平を言います。 "enum hasLocalAliasing = false;" (gdcを使うとコードブロックで作業するためにdmdを得ることができないため) – user1319341

関連する問題