Boost logo

Boost Users :

From: Kutch, Patrick G (patrick.g.kutch_at_[hidden])
Date: 2004-08-03 16:34:02

Has nobody else experienced this?

Patrick Kutch
Life is too short to drink bad coffee.

-----Original Message-----
From: boost-users-bounces_at_[hidden]
[mailto:boost-users-bounces_at_[hidden]] On Behalf Of Kutch, Patrick
Sent: Thursday, July 22, 2004 8:07 PM
To: boost-users_at_[hidden]
Subject: [Boost-users] Looking for some help with boost::thread::sleep()

I am used to putting in quick sleep() statements in my worker threads,
usually a sleep(0) just to give up a timeslice, or maybe a sleep(1).

Of course boost::thread::sleep takes an xtime object not a milliseconds
value, so I wrote a small routine to simulate the sleep() statement
using boost::thread::sleep:

void inline UtilitySleep(long milliSeconds)

if (0 == milliSeconds)
        boost::thread::yield(); // just do a yield
boost::xtime time;

int sec = 0;
// if larger than 1 sec, do some voodoo for the boost::xtime struct
if (milliSeconds >= 1000)
{ // convert ms > 1000 into secs + remaining ms
        int secs = milliSeconds /1000;
        milliSeconds = milliSeconds - secs*1000;
        sec += secs;
// normal boost time sleep stuff
// get current time
// add # of desired secs and ms
time.sec+= sec;
// sleep until that time

It seems to always work fine unde Windows, however occasionally under
Linux it appears that if I use a small value, such as sleep(2) that
sometimes it takes longer to setup the values and call
boost::thread:sleep() and I end up passing an xtime value that has
already passed, basically blocking the thread forever.

Anybody have any advice for me?


- Patrick

Boost-users mailing list

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at