www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Sleep in a cycle

reply Alexander Zhirov <azhirov1991 gmail.com> writes:
I have a loop spinning, I want to pause in it in order to repeat 
the next iteration. An error is displayed during compilation.

```d
import std.stdio;
import modules.monitors; //my module
import core.thread;

int main(string[] args)
{
     string path = "mswitch.log";
     if (args.length > 1)
     {
         path = args[1];
     }
     auto file = File(path, "w");

     auto monitors = getMonitorsInfo();
     file.writeln(monitors);

     while (true)
     {
         setPrimaryMonitor(monitors[1].name);
         file.writeln("-- Switch monitors --");
         swapMonitors(monitors[0].name, monitors[1].name, 
Relation.right_of);
         monitors = getMonitorsInfo();
         file.writeln(monitors);

         Thread.sleep(dur!("seconds")(10));
     }

     file.close();

     return 0;
}

```

Result build:

```sh
$ dub
Performing "debug" build using /usr/bin/ldc2 for x86_64.
mswitch ~master: building configuration "application"...
Running pre-build commands...
source/app.d(32,5): Warning: statement is not reachable
source/app.d(34,5): Warning: statement is not reachable
source/app.d(32,5): Warning: statement is not reachable
source/app.d(34,5): Warning: statement is not reachable
Error: warnings are treated as errors
        Use -wi if you wish to treat warnings only as 
informational.
/usr/bin/ldc2 failed with exit code 1.
```

Is there any way to pause to slow down the cycle?
May 20 2022
next sibling parent Adam D Ruppe <destructionator gmail.com> writes:
On Friday, 20 May 2022 at 14:59:07 UTC, Alexander Zhirov wrote:
 I have a loop spinning, I want to pause in it in order to 
 repeat the next iteration. An error is displayed during 
 compilation.
The error has nothing to do with the sleep
 source/app.d(32,5): Warning: statement is not reachable
 Error: warnings are treated as errors
        Use -wi if you wish to treat warnings only as 
 informational.
this is saying the stuff after your `while(true)` is never reached because it is an infinite loop.
May 20 2022
prev sibling parent reply =?UTF-8?Q?Ali_=c3=87ehreli?= <acehreli yahoo.com> writes:
On 5/20/22 07:59, Alexander Zhirov wrote:
 I have a loop spinning, I want to pause in it in order to repeat the
 next iteration. An error is displayed during compilation.

 ```d
      while (true)
      {
We are in an unconditional loop which is also infinite.
      }
But you have code after the loop:
      file.close();

      return 0;
 }

 ```
 source/app.d(32,5): Warning: statement is not reachable
That is warning you that your code cannot be executed. One option: 1) Change main's return type to 'void' and remove 'return 0'. (The program will automatically return 0 to its starter upon successful completion and non-zero upon an uncaught exception.) 2) Remove file.close(), which is not needed because File is an RAII type; its objects close their handles in their destructors automatically. However, since your code never gets to that point, you may have unflushed data when you terminate the program. I think it depends on your file system whether '\n' which is implied at ends of writeln is a flush trigger. 3) Regardless, I would add file.flush() after the last writeln in the loop.
 Is there any way to pause to slow down the cycle?
That is correct. There is a more pleasant syntax that takes advantage of D's UFCS: Thread.sleep(10.seconds); Ali
May 20 2022
parent reply Alain De Vos <devosalain ymail.com> writes:
Or you could capture a sigint and close the file then.
May 21 2022
parent Alexander Zhirov <azhirov1991 gmail.com> writes:
My schoolboy mistake. Thank you, 
[Adam](https://forum.dlang.org/post/mbbampewwcrkkltjlmij forum.dlang.org)!

On Saturday, 21 May 2022 at 11:17:04 UTC, Alain De Vos wrote:
 Or you could capture a sigint and close the file then.
Yes, exactly, I was thinking in this direction. Probably not quite correctly implemented in practice.
May 22 2022