您需要使用單獨的線程。像這樣的東西是做它在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); });
}
這產生一個獨立的線程,其確實在控制檯輸入等待,而你的主線程可以做其他的工作。
感謝您的快速響應。我正在測試它。當我嘗試編譯它抱怨concurrency.d文件中的一些錯誤,但我想這是我的設置問題。 – user1319341 2012-04-07 17:23:06
它適用於Linux Mint 12(x86-64)上的DMD 2.058。 – 2012-04-07 17:37:29
使用gdc作爲編譯器,它抱怨enum在concurrency.d中聲明的方式。「enum hasLocalAliasing = false;」 (使用gdc,因爲我不能讓dmd使用代碼塊) – user1319341 2012-04-07 17:47:32