This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Re: Re: Adding a new thread model to GCC
- From: "lh_mouse"<lh_mouse at 126 dot com>
- To: "Jonathan Wakely"<jwakely dot gcc at gmail dot com>
- Cc: "gcc"<gcc at gcc dot gnu dot org>, "mingw-w64-public"<mingw-w64-public at lists dot sourceforge dot net>
- Date: Mon, 18 Apr 2016 18:05:31 +0800
- Subject: Re: Re: Re: Adding a new thread model to GCC
- Authentication-results: sourceware.org; auth=none
- References: <2f3897eb dot bbc0e dot 1540ee9aa0b dot Coremail dot lh_mouse at 126 dot com> <CAH6eHdQ2b_NLLC6Hyq=tKgXhgAEhTdV1d2+sv6enHN7wG4JESQ at mail dot gmail dot com> <3eafd9c2 dot ce5a2 dot 154252730a4 dot Coremail dot lh_mouse at 126 dot com> <CAH6eHdQhDSwSt91xSi_yGSrsownGCErTP5H=3w1NrjXkr9T98Q at mail dot gmail dot com> <3d4feb73 dot d4007 dot 15428a9a070 dot Coremail dot lh_mouse at 126 dot com><CAH6eHdTz9HBJEgJqSse9QDJqs5KpUpVWi8FXScSVCL4-=kh9mg at mail dot gmail dot com>
>>> If the current code assumes a struct and the Windows API calls need an
>>> integer then either the existing code needs to be made more flexible,
>>> or you need to define it as a struct and then convert to an integer
>>> inside your new gthread wrapper functions.
>>
>> The Windows APIs involved use LARGE_INTEGER - a union of a 64-bit integer and an array of two 32-bit integers - because some languages might have no native 64-bit integer types.
>> Actually in C99 and C++11 we just assume there is long long and int64_t despite the fact that ISO C marks int64_t as optional, so it can be regarded as a union whose only element is an int64_t.
>>
> What are the units of the argument? Milliseconds?
>From Windows SDK:
File Times
A file time is a 64-bit value that represents the number of 100-nanosecond intervals that have elapsed since 12:00 A.M. January 1, 1601 Coordinated Universal Time (UTC).
This decision makes it much easier to count leap years, no?
> You have two choices, either modify all the places in libstdc++ that
> use __gthread_time_t, changing the code to use some new function
> template that populates a __gthread_time_t from a
> std::chrono::time_point<C,D> or std::chrono::duration<R,P>, or define
> a similar struct in your gthreads header and convert it to int64_t
> inside your functions. For functions taking a relative time the
> conversion from a { seconds, nanoseconds } struct to milliseconds is
> trivial, for functions taking an absolute time you need to know the
> epoch of the clock that was used when populating the struct.
Will do that next week. Still need to make gcc work with my library.
------------------
Best regards,
lh_mouse
2016-04-18