This is the mail archive of the
pthreads-win32@sources.redhat.com
mailing list for the pthreas-win32 project.
Re: pthread_cond_timedwait
tests\stress1.c uses the following routine. The args are: a pointer to a
timespec instance and; the number of millisecs into the future. It
returns the first arg so you can call it directly from within
pthread_cond_wait's argument list:
struct timespec *
millisecondsFromNow (struct timespec * time, int millisecs)
{
struct _timeb currSysTime;
int64_t nanosecs, secs;
const int64_t NANOSEC_PER_MILLISEC = 1000000;
const int64_t NANOSEC_PER_SEC = 1000000000;
/* get current system time and add millisecs */
_ftime(&currSysTime);
nanosecs = ((int64_t) (millisecs + currSysTime.millitm)) * NANOSEC_PER_MILLISEC;
if (nanosecs >= NANOSEC_PER_SEC)
{
secs = currSysTime.time + 1;
nanosecs %= NANOSEC_PER_SEC;
}
else
{
secs = currSysTime.time;
}
time->tv_nsec = (long)nanosecs;
time->tv_sec = (long)secs;
return time;
}
Ross
On Fri, 2005-06-10 at 21:23 +0100, Steve Croall (TIBCO) wrote:
> Hi,
>
> The timeout parameter you pass to pthread_cond_timedwait() is a struct
> timespec type, which is defined in pthread.h, if HAVE_STRUCT_TIMESPEC is
> not defined at build time.
>
> struct timespec {
> long tv_sec;
> long tv_nsec;
> };
>
> Just set the tv_nsec to the amount of nanoseconds required. The pthread
> source on Windows uses the following calculation to convert the above
> structure to milliseconds:
>
> tmpAbsMilliseconds = (int64_t)abstime->tv_sec * MILLISEC_PER_SEC;
> tmpAbsMilliseconds += ((int64_t)abstime->tv_nsec +
> (NANOSEC_PER_MILLISEC/2)) / NANOSEC_PER_MILLISEC;
>
> Using the following defines:
>
> const int64_t NANOSEC_PER_MILLISEC = 1000000;
> const int64_t MILLISEC_PER_SEC = 1000;
>
> Steve.
>
> Allan Comar wrote:
> > Hi all, I am needing something that I couldn't find in nowhere else, I am trying to use pthread_cond_timedwait but I want that the time that I need to wait is setted im milliseconds, I already could do in seconds and i am having a real hard time trying it in milliseconds. Any Ideas ? I am using MSVC6.0 with pthreads.
> >
>