代码之家  ›  专栏  ›  技术社区  ›  gavr

msys2 vala无控制台输出

  •  0
  • gavr  · 技术社区  · 7 年前

    如果我创建一个包含一个打印的简单程序,那么一切都正常,输出就在那里,但是在这个示例代码中,由于某种原因,输出是空的。这是矢量化优化的一个例子:

    void ink(int[] arr,int a){
        for (int i=0;i<arr.length-8;i+=8) {
            arr[i]+=a;  arr[i+1]+=a;    arr[i+2]+=a;    arr[i+3]+=a;
            arr[i+4]+=a;    arr[i+5]+=a;    arr[i+6]+=a;    arr[i+7]+=a;
            //print(@"$i , $(i+1), $(i+2), $(i+3)\n");
            //print(@"$(arr[i]) , $(arr[i+1]), $(arr[i+2]), $(arr[i+3])\n\n");
        }
    
        int idx = arr.length - (arr.length %8);
        for (int k = idx;k<arr.length;k++) {
            arr[k]+=a;
        }
    
    // for (int i=0;i<arr.length;i++) {
    //  arr[i]+=a;
    // }
    }
    
    void printMass(int[] arr){
        stdout.printf("\nAfter ink\n");
    foreach (int a in arr) {
        print(a.to_string() + "\n");
    }
    }
    
    int main(string[] args) {
    int arr [999999];
    
    for (int i=0;i<arr.length;i++) {
        arr[i]=Random.int_range(0,100);
        //print(arr[i].to_string() + "\n");
    }
    stdout.printf(@"ink of $(arr.length) elements\n");
    Timer tmr = new Timer();
    ink(arr,5);
    tmr.stop();
    ulong mcSec=0;tmr.elapsed(out mcSec);
    stdout.printf(@"microseconds have passed $mcSec");
    stdout.printf("TEST");
    //printMass(arr);
    return 0;
    }
    

    在Linux上,我得到:

    ink of 999999 elements
    microseconds have passed 2462TEST⏎ 
    

    在Windows MSys2控制台上:

    gavr@DESKTOP-B57MHT8 MINGW64 ~
    $ ./console.exe
    
    gavr@DESKTOP-B57MHT8 MINGW64 ~
    

    甚至不是普通的印刷品(“测试”); 我尝试了一个标准的例子 timer ,它的工作原理是:

    gavr@DESKTOP-B57MHT8 MINGW64 ~
    $ ./timer.exe
    1.1: 0.00014100000000000001, 141
    1.2: 0.0011130000000000001, 1113
    2.1: 0.00052999999999999998, 530
    

    我的代码怎么了?

    1 回复  |  直到 7 年前
        1
  •  0
  •   AlThomas    7 年前

    这可能与MSys2的终端缓冲有关。你可以试试 stdout.flush (); 在节目结束时。

    另一个选项是如何编译Windows应用程序。有 -mconsole 编译器选项,用于编译具有控制台支持的程序。要从vala编译器中传递它,您将使用 valac -X -mconsole myprogram.vala .

    推荐文章