<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Hi all:<br>see at:<br>http://www.ic.unicamp.br/~stolfi/EXPORT/software/m3/Misc.html <br><br>CPUTime module.<br>Thanks in advance<br><br>--- El <b>lun, 14/3/11, Jay K <i><jay.krell@cornell.edu></i></b> escribió:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>De: Jay K <jay.krell@cornell.edu><br>Asunto: Re: [M3devel] question on use of Time.Now in thread test program<br>Para: rcolebur@scires.com, "m3devel" <m3devel@elegosoft.com><br>Fecha: lunes, 14 de marzo, 2011 18:07<br><br><div id="yiv1082952660">

<style><!--
#yiv1082952660 .yiv1082952660hmmessage P
{
margin:0px;padding:0px;}
#yiv1082952660 .yiv1082952660hmmessage
{
font-size:10pt;font-family:Tahoma;}
--></style>
Time.Now() is very cheap on Windows and should cause no concern.<br>
It is just GetSystemTimeAsFileTime, which just reads some globals, followed by a simple unit and integer to double conversion.<br>
I would avoid 64bit Windows for now, very unfortunate, but I don't trust GetThreadContext.<br>
 <br>
 <br>
PROCEDURE Now(): T=<br>  VAR<br>    fileTime: WinBase.FILETIME;<br>  BEGIN<br>    WinBase.GetSystemTimeAsFileTime(fileTime);<br>    RETURN TimeWin32.FromFileTime(fileTime);<br>  END Now;<br><br><br>
double<br>__cdecl<br>TimeWin32__FromFileTime(FILETIME ft)<br>{<br>    LARGE_INTEGER li;<br><br>    li.LowPart = ft.dwLowDateTime;<br>    li.HighPart = ft.dwHighDateTime;<br>    return ((double)li.QuadPart) / 1.0e7;<br>}<br><br><br>
Hm -- I don't like passing structs by value, too hard to be sure how it works -- I'd like to change this to be "READONLY" -- passed by pointer.<br>
Maybe code the entire thing in Modula-3 -- or more likely, the entire thing in C.<br>
 <br>
Time.Now() might be more expensive on other platform, I don't know.<br>
 <br>
I also see some failures, some success, no pattern.<br>
I think the success is just luck and the code is by its nature very non-deterministic.<br>
 <br>
 - Jay<br> <br>

<hr id="yiv1082952660stopSpelling">
From: rcolebur@SCIRES.COM<br>To: m3devel@elegosoft.com<br>Date: Mon, 14 Mar 2011 18:45:44 -0400<br>Subject: [M3devel] question on use of Time.Now in thread test program<br><br>
 
<style>
#yiv1082952660 .yiv1082952660ExternalClass p.yiv1082952660ecxMsoNormal, #yiv1082952660 .yiv1082952660ExternalClass li.yiv1082952660ecxMsoNormal, #yiv1082952660 .yiv1082952660ExternalClass div.yiv1082952660ecxMsoNormal
{margin-bottom:.0001pt;font-size:11.0pt;font-family:'sans-serif';}
#yiv1082952660 .yiv1082952660ExternalClass a:link, #yiv1082952660 .yiv1082952660ExternalClass span.yiv1082952660ecxMsoHyperlink
{color:blue;text-decoration:underline;}
#yiv1082952660 .yiv1082952660ExternalClass a:visited, #yiv1082952660 .yiv1082952660ExternalClass span.yiv1082952660ecxMsoHyperlinkFollowed
{color:purple;text-decoration:underline;}
#yiv1082952660 .yiv1082952660ExternalClass span.yiv1082952660ecxEmailStyle17
{font-family:'sans-serif';color:windowtext;}
#yiv1082952660 .yiv1082952660ExternalClass .yiv1082952660ecxMsoChpDefault
{}
 _filtered #yiv1082952660 {}
#yiv1082952660 .yiv1082952660ExternalClass div.yiv1082952660ecxWordSection1
{}

</style>

<div class="yiv1082952660ecxWordSection1">
<p class="yiv1082952660ecxMsoNormal">I have a question/concern regarding Mika’s thread test program.</p>
<p class="yiv1082952660ecxMsoNormal"> </p>
<p class="yiv1082952660ecxMsoNormal">Each of the threads makes use of the Time.Now() call during each iteration of the thread’s main loop.  </p>
<p class="yiv1082952660ecxMsoNormal"> </p>
<p class="yiv1082952660ecxMsoNormal">I haven’t fully investigated, but does anyone have concern that so many calls to the system clock from multiple competing threads might have some side effect on the running of multiple threads?</p>
<p class="yiv1082952660ecxMsoNormal"> </p>
<p class="yiv1082952660ecxMsoNormal">I’ve also done some limited experimentation with use of counters to see how many times each type of thread is able to go thru its loop between reporting intervals.</p>
<p class="yiv1082952660ecxMsoNormal"> </p>
<p class="yiv1082952660ecxMsoNormal">I continue to see various types of crashes on Windows 7 (64-bit), but sometimes tests are able to succeed.  I haven’t found a repeatable pattern yet to the crashes, so I am still investigating, but just thought it worth asking the above question about use of Time.Now().</p>
<p class="yiv1082952660ecxMsoNormal"> </p>
<p class="yiv1082952660ecxMsoNormal">I will also try to experiment with Windows XP 32-bit and report back.</p>
<p class="yiv1082952660ecxMsoNormal"> </p>
<p class="yiv1082952660ecxMsoNormal">Regards,</p>
<p class="yiv1082952660ecxMsoNormal">Randy Coleburn</p></div>                                         
</div></blockquote></td></tr></table><br>