Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Console 从控制台读取而不暂停程序_Console_D - Fatal编程技术网

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

Console 从控制台读取而不暂停程序,console,d,Console,D,我用d编程语言编写了一个小型opengl程序。我试图做的是允许程序从控制台读取输入。我尝试过使用readf()、getc()和其他一些函数。但我的问题是我不希望程序在寻找输入时暂停 我试着四处寻找解决方案,但找不到任何解决方案。因此,如果有人知道如何检查控制台中是否确实写入了某些内容,如果是,请阅读。或者,如果存在任何从控制台读取的函数,但如果未写入任何内容,则将忽略该函数 我主要想知道如何在D中这样做,但是C++的解决方案也很有用。 你需要使用一个单独的线程。这是在D中实现的一种方法: imp

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

我试着四处寻找解决方案,但找不到任何解决方案。因此,如果有人知道如何检查控制台中是否确实写入了某些内容,如果是,请阅读。或者,如果存在任何从控制台读取的函数,但如果未写入任何内容,则将忽略该函数


<>我主要想知道如何在D中这样做,但是C++的解决方案也很有用。

你需要使用一个单独的线程。这是在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文件中出现了一些错误,但我想这是我的设置中的一个问题。使用gdc作为编译器,它会抱怨在concurrency.d中声明枚举的方式。d“enum hasLocalAliasing=false;”(使用gdc是因为我无法让dmd处理代码块)听起来像是将gdc用于d 1.0,而不是D2.0。如果你在Ubuntu发行版上,那些repos中的GDC和LDC版本是针对D1.0的。是的,我正在使用Ubuntu。所以我可能使用的是1.0版本。我会为D2.0安装GDC,我想它会工作的,谢谢你的帮助。