2012-04-07 61 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 2012-04-07 17:23:06

+0

它適用於Linux Mint 12(x86-64)上的DMD 2.058。 – 2012-04-07 17:37:29

+0

使用gdc作爲編譯器,它抱怨enum在concurrency.d中聲明的方式。「enum hasLocalAliasing = false;」 (使用gdc,因爲我不能讓dmd使用代碼塊) – user1319341 2012-04-07 17:47:32