MSYS2 Vala 没有控制台输出

Posted

技术标签:

【中文标题】MSYS2 Vala 没有控制台输出【英文标题】:MSYS2 Vala no console output 【发布时间】:2019-01-06 16:25:39 【问题描述】:

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

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 ~

甚至不是常规打印(“TEST”); 我尝试了timer 的标准示例,它可以工作:

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

我的代码有什么问题?

【问题讨论】:

【参考方案1】:

这可能与 MSYS2 的终端缓冲有关。您可以在程序结束时尝试stdout.flush ();

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

【讨论】:

仍然没有 gavr@DESKTOP-B57MHT8 MINGW64 ~ $ valac -X -mconsole console.vala 编译成功 - 1 个警告 console.vala:19.1-19.14: 警告:方法 `printMass' 从未使用过void printMass(int[] arr) ^^^^^^^^^^^^^^ gavr@DESKTOP-B57MHT8 MINGW64 ~ $ ./console.exe gavr@DESKTOP-B57MHT8 MINGW64 ~ $ stdout.flush (); ? 是的,仍然没有。但我刚刚用 19 个元素编译,它可以工作,wtf gavr@DESKTOP-B57MHT8 MINGW64 ~ $ ./console.exe 19 个元素微秒的墨水已经通过 5TEST

以上是关于MSYS2 Vala 没有控制台输出的主要内容,如果未能解决你的问题,请参考以下文章

Conemu, Msys2 工具整合,提升windows下控制台工作效率

如何使用Vala将GStreamer视频输出到Gdk.Pixbuf?

新人求问,sublime控制台输入后为啥没有输出

jmeter 控制台有summary,输出文件没有

Eclipse Juno 中没有控制台输出

Xcode 11 / iOS 13 没有控制台输出