Can I get the time "Duration" in "nsecs" acurracy?

Steven Schveighoffer schveiguy at gmail.com
Sun Jul 11 13:40:19 UTC 2021


On 7/9/21 5:13 PM, rempas wrote:
> On Friday, 9 July 2021 at 20:54:21 UTC, Paul Backus wrote:
>> On Friday, 9 July 2021 at 20:43:48 UTC, rempas wrote:
>>> I'm reading the library reference for 
>>> [core.time](https://dlang.org/phobos/core_time.html#Duration) and It 
>>> says that the duration is taken in "hnsecs" and I cannot understand 
>>> if we can change that and choose the precision. Does anyone know if 
>>> we can do that?
>>
>> It is stored internally in "hnsecs", but you can convert it to other 
>> units using the `total` method [1]; for example, 
>> `myDuration.total!"nsecs"`.
>>
>> [1] https://dlang.org/phobos/core_time.html#.Duration.total
> 
> It doesn't work for me. I have the following code:
> 
> ```
> MonoTime start = MonoTime.currTime();
> // Doing stuff
> MonoTime end = MonoTime.currTime();
> Duration dur = end - start;
> dur = dur.total!"nsecs";
> ```
> 
> and I get the following error message:
> 
> "Error: cannot implicitly convert expression \`dur.total()\` of type 
> \`long\` to \`Duration`"

BTW `Duration` is truncating here. `MonoTime` stores its values in 
implementation-defined ticks, which can be nanoseconds or any other 
thing that the specific clock uses. Whereas `Duration` uses strictly hnsecs.

If you want to get sub-hnsec resolution, use the `ticks` member of 
`MonoTime` and `ticksPerSecond` and do the math for the units.

See the warning 
[here](https://dlang.org/phobos/core_time.html#.MonoTimeImpl.opBinary).

-Steve


More information about the Digitalmars-d-learn mailing list