Re: gettimeofday problem

From: Salvatore D'Angelo (dangelo.sasaman@tiscalinet.it)
Date: Mon Jun 24 2002 - 05:20:02 EST


In this piece of code I convert seconds and microseconds in
milliseconds. I think the problem is not in my code, in fact I wrote the
following piece of code in Java, and it does not work too. In the for
loop the 90% of times b > a while for 10% of times not.

    class Prova {
          public static void main(....) {
               for (;;) {
                    long a = System.currentTimeMillis();
                    long b = System.currentTimeMillis();

                    if (a > b) {
                         System.out.println("Wrong!!!!!!!!!!!!!");
                    }
               }
          }
    }

Chris McDonald wrote:

>In linux.kernel you write:
>
>
>
>>Hi,
>>
>>
>
>
>
>>I am writing a small piece of code that use the gettimeofday routine and
>>I have noticed a very strange behaviour. If I call the routine two times
>>in sequence I expect that the second value is greater than or equal to
>>the first one, but it is not true.
>>
>>
>
>Perhaps because tv_usecs are MICROsecs, not MILLIsecs ?
>
>_______________________________________________________________________________
> Dr Chris McDonald EMAIL: chris@csse.uwa.edu.au
> Department of Computer Science & Software Engineering
>The University of Western Australia WWW: http://www.csse.uwa.edu.au/~chris
> Crawley, Western Australia, 6009 PH: +61 8 9380 2533, FAX: +61 8 9380 1089
>
>
>
>
>>please check the following code.
>>
>>
>
>
>
>>Sometimes happen that the string "Strange Behaviour" is printed with
>>kernel 2.4.18.
>>
>>
>
>
>
>>I tried to find in the Linux Archive patches to solve this problem, but
>>I didn't find anything (there are emails that talk about gettimeofday,
>>but probably they do not answer to my questions).
>>
>>
>
>
>
>>The same thing happen in Java using the System.currentTimeMillis() routine.
>>
>>
>
>
>
>>#include <fstream.h>
>>#include <sys/time.h>
>>
>>
>
>
>
>>// this routine calculate the current time returning its value in long
>>long format.
>>long long currentTimeMillis() {
>> long long t;
>> struct timeval tv;
>>
>>
>
>
>
>> gettimeofday(&tv, 0);
>>
>>
>
>
>
>> t = tv.tv_sec;
>> t = (t *1000) + (tv.tv_usec/1000);
>>
>>
>
>
>
>> return t;
>>}
>>
>>
>
>
>
>>void main() {
>> for (;;) {
>> long long a = currentTimeMillis();
>> long long b = currentTimeMillis();
>>
>>
>
>
>
>> if (a>b) {
>> cout << "Strange Behaviour" << endl;
>> }
>> }
>>}
>>
>>
>
>
>

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Jun 30 2002 - 22:00:06 EST