writeln() sometimes double prints from main() if I run a thread checking for input?

Stefan Koch via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Aug 30 04:28:49 PDT 2017


On Wednesday, 30 August 2017 at 10:55:20 UTC, Timothy Foster 
wrote:
> On Wednesday, 30 August 2017 at 10:44:43 UTC, Ivan Kazmenko 
> wrote:
>> On Wednesday, 30 August 2017 at 10:13:57 UTC, Timothy Foster 
>> wrote:
>>> I'm not sure if this is a known issue, or if I just don't 
>>> understand how to use threads, but I've got writeln 
>>> statements sometimes printing out twice in some areas of my 
>>> code.
>>> <...>
>>> Does anyone know what is causing this or how I can fix it?
>>
>> Difficult to say by what you posted.
>>
>> You may want to provide a complete example so that others may 
>> try to reproduce it.  Additionally, as you gradually simplify 
>> your code until it is small enough to post here, or on DPaste, 
>> you may find the cause faster yourself.
>>
>> Ivan Kazmenko.
>
> import std.stdio, core.thread;
>
> void main(){	
> 	auto thread = new Thread(&func).start;
>         writeln("Output");
> 	writeln("Output2");
> 	writeln("Output3");
> 	while(true){}
> }
>
> void func(){
>     foreach(line; stdin.byLineCopy){}
> }
>
> The printout from the above typically gives me:
> Output
> Output2
> Output2
> Output3
>
> I've narrowed down the issue. I just don't know what to do 
> about it.

I cannot reproduce this. what os / compiler are you using ?


More information about the Digitalmars-d-learn mailing list