[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
patch for join and periodic timers from Jakob Scov-Pedersen
From: |
Federico Montesino Pouzols |
Subject: |
patch for join and periodic timers from Jakob Scov-Pedersen |
Date: |
Mon, 23 Dec 2002 10:41:45 +0100 |
User-agent: |
Mutt/1.4i |
Hi, Jakob Skov-Pedersen has recently submitted thrugh savannah
the patch included below. It adds a new method (Thread::join) and a
bool parameter for setTimer, which allows for setting a periodic
timer.
Since there has been a discussion about threads, some people
may have comments about this patch. I would apply it for both the next
1.0 release and the 1.1 release, just adding a comment stating that
the periodic timer will be available only where itimer is available,
and adding the 'false' default value for the bool parameter of
setTimer.
-----------
diff -rc2P commoncpp2-1.0.7/ChangeLog commoncpp2-1.0.7-jasp2/ChangeLog
*** commoncpp2-1.0.7/ChangeLog Mon Nov 25 20:38:32 2002
--- commoncpp2-1.0.7-jasp2/ChangeLog Thu Dec 5 19:50:35 2002
***************
*** 1,2 ****
--- 1,4 ----
+ From 1.0.7 to 1.0.7-jasp
+ - timer in PosixThread can now be periodic, I think
From Common C++ 2 1.0.6 to 1.0.7
- socketport attach() stuff.
diff -rc2P commoncpp2-1.0.7/include/cc++/thread.h
commoncpp2-1.0.7-jasp2/include/cc++/thread.h
*** commoncpp2-1.0.7/include/cc++/thread.h Sun Nov 10 05:19:36 2002
--- commoncpp2-1.0.7-jasp2/include/cc++/thread.h Thu Dec 5 20:18:51 2002
***************
*** 1069,1072 ****
--- 1069,1073 ----
friend class Slog;
+ Semaphore joinSem;
static Thread* _main;
***************
*** 1341,1344 ****
--- 1342,1350 ----
/**
+ * Blocking call which unlucks when thread terminates
+ */
+ void join(void);
+
+ /**
* Get exception mode of the current thread.
*
***************
*** 1475,1480 ****
*
* @param timer timeout in milliseconds.
*/
! void setTimer(timeout_t timer);
/**
--- 1481,1487 ----
*
* @param timer timeout in milliseconds.
+ * @param recuring should the timer be periodic
*/
! void setTimer(timeout_t timer, bool periodic);
/**
diff -rc2P commoncpp2-1.0.7/src/thread.cpp commoncpp2-1.0.7-jasp2/src/thread.cpp
*** commoncpp2-1.0.7/src/thread.cpp Sun Nov 10 05:19:37 2002
--- commoncpp2-1.0.7-jasp2/src/thread.cpp Thu Dec 5 20:25:10 2002
***************
*** 276,279 ****
--- 276,283 ----
}
+ void Thread::join(void) {
+ joinSem.wait();
+ }
+
/*
* End Suspend/Resume stuff
***************
*** 825,828 ****
--- 829,833 ----
priv->_tid = 0;
}
+ joinSem.post();
}
***************
*** 1253,1257 ****
}
! void PosixThread::setTimer(timeout_t timer)
{
sigset_t sigs;
--- 1258,1262 ----
}
! void PosixThread::setTimer(timeout_t timer, bool periodic)
{
sigset_t sigs;
***************
*** 1263,1266 ****
--- 1268,1275 ----
itimer.it_value.tv_usec = (timer * 1000) % 1000000;
itimer.it_value.tv_sec = timer / 1000;
+ if (periodic) {
+ itimer.it_interval.tv_usec = itimer.it_value.tv_usec;
+ itimer.it_interval.tv_sec = itimer.it_value.tv_sec;
+ }
#else
timer /= 1000;
- patch for join and periodic timers from Jakob Scov-Pedersen,
Federico Montesino Pouzols <=