Hi, I found that simplest function getCurrentTimeMs() work different
in browser environment (tested on origin/incoming). Code is simple:

#include <sys/time.h>
#include <cstdio>

int main(int, char**) {
    static struct timeval tp;
    gettimeofday(&tp, 0);
    printf("%ld %ld %ld\n", tp.tv_sec, tp.tv_usec, tp.tv_sec * 1000 +
tp.tv_usec / 1000);
    return 0;
}

In native (linux) environment:
1519117387 651928 1519117387651

In browser/node.js (em++ time.cpp -o time.js):
1519117389 245000 -1301033539

Looks like overflow problem:

#include <sys/time.h>
#include <cstdio>

int main(int, char**) {
    printf("%ld\n", 1519117387 * 1000l);
    return 0;
}

native:
1519117387000

node.js:
-1301035784

only using 1000ll helps.

For code:

long time = 1519117387 * 1000l;

emscripten compilator reports:
time.cpp:5:28: warning: overflow in expression; result is -1301035784
with type 'long' [-Winteger-overflow]

native is ok. Anyway it's little bit strange, don't remember this
problem before. For emscripten I should store ms in long long type?
Don't understand.

This code also return negative values:

#include <sys/time.h>
#include <cstdio>
#include <emscripten.h>

int main(int, char**) {
    long long time = EM_ASM_INT((
        return Date.now();
    ));
    printf("%lld\n", time);
    return 0;
}

So only way is use EM_ASM_DOUBLE? is it safe?

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to