digitalmars.D - readln() blocks file operations on windows
- Martin Drasar via Digitalmars-d (27/27) Jul 31 2014 Hi,
- FreeSlave (3/3) Jul 31 2014 Note that output to stdout is not good choice to check event
- Martin Drasar via Digitalmars-d (6/9) Jul 31 2014 Hi,
- Inspi8 (4/17) Aug 05 2014 Hi,
Hi, consider this code: import std.stdio; import std.concurrency; import core.thread; void tryOpen() { Thread.sleep(2.seconds); try { auto f = File("nonexistent"); } catch (Exception e) { writeln("Could not open a file"); } } void main() { spawn(&tryOpen); readln(); } On Linux, it works as expected, showing a "Could not open a file" after two or so seconds. On windows, however, the file opening gets blocked until a line is read from stdin. Is this a feature or a bug? If it is a feature, it certainly is not documented. Cheers, Martin
Jul 31 2014
Note that output to stdout is not good choice to check event order, because it's buffered. Try to flush stdout or write to stderr. Maybe it's actual problem.
Jul 31 2014
On 31.7.2014 20:37, FreeSlave via Digitalmars-d wrote:Note that output to stdout is not good choice to check event order, because it's buffered. Try to flush stdout or write to stderr. Maybe it's actual problem.Hi, this is just for illustration, although I think that writeln flushes itself. I was checking it in a debugger after it suddenly hung my entire program. Martin
Jul 31 2014
On Thursday, 31 July 2014 at 19:13:28 UTC, Martin Drasar via Digitalmars-d wrote:On 31.7.2014 20:37, FreeSlave via Digitalmars-d wrote:Hi, It works under Windows wenn compiled as a 64-bit program ( -m64 )Note that output to stdout is not good choice to check event order, because it's buffered. Try to flush stdout or write to stderr. Maybe it's actual problem.Hi, this is just for illustration, although I think that writeln flushes itself. I was checking it in a debugger after it suddenly hung my entire program. Martin
Aug 05 2014