Skip to content

Commit f29966e

Browse files
committed
Merge pull request #4 from edgar-bonet/master
Use unsigned long for representing times.
2 parents 5166311 + 9310beb commit f29966e

File tree

4 files changed

+27
-26
lines changed

4 files changed

+27
-26
lines changed

Thread.cpp

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "Thread.h"
22

3-
Thread::Thread(void (*callback)(void), long _interval){
3+
Thread::Thread(void (*callback)(void), unsigned long _interval){
44
enabled = true;
55
onRun(callback);
66
_cached_next_run = 0;
@@ -15,33 +15,28 @@ Thread::Thread(void (*callback)(void), long _interval){
1515
setInterval(_interval);
1616
};
1717

18-
void Thread::runned(long time){
19-
// If less than 0, than get current ticks
20-
if(time < 0)
21-
time = millis();
22-
18+
void Thread::runned(unsigned long time){
2319
// Saves last_run
2420
last_run = time;
2521

2622
// Cache next run
2723
_cached_next_run = last_run + interval;
2824
}
2925

30-
void Thread::setInterval(long _interval){
31-
// Filter intervals less than 0
32-
interval = (_interval < 0? 0: _interval);
26+
void Thread::setInterval(unsigned long _interval){
27+
// Save interval
28+
interval = _interval;
3329

3430
// Cache the next run based on the last_run
3531
_cached_next_run = last_run + interval;
3632
}
3733

38-
bool Thread::shouldRun(long time){
39-
// If less than 0, than get current ticks
40-
if(time < 0)
41-
time = millis();
34+
bool Thread::shouldRun(unsigned long time){
35+
// If the "sign" bit is set the signed difference would be negative
36+
bool time_remaining = (time - _cached_next_run) & 0x80000000;
4237

4338
// Exceeded the time limit, AND is enabled? Then should run...
44-
return ((time >= _cached_next_run) && enabled);
39+
return !time_remaining && enabled;
4540
}
4641

4742
void Thread::onRun(void (*callback)(void)){
@@ -54,4 +49,4 @@ void Thread::run(){
5449

5550
// Update last_run and _cached_next_run
5651
runned();
57-
}
52+
}

Thread.h

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,24 @@
3333
class Thread{
3434
protected:
3535
// Desired interval between runs
36-
long interval;
36+
unsigned long interval;
3737

3838
// Last runned time in Ms
39-
long last_run;
39+
unsigned long last_run;
4040

4141
// Scheduled run in Ms (MUST BE CACHED)
42-
long _cached_next_run;
42+
unsigned long _cached_next_run;
4343

4444
/*
4545
IMPORTANT! Run after all calls to run()
4646
Updates last_run and cache next run.
4747
NOTE: This MUST be called if extending
4848
this class and implementing run() method
4949
*/
50-
void runned(long time=-1);
50+
void runned(unsigned long time);
51+
52+
// Default is to mark it runned "now"
53+
void runned() { runned(millis()); }
5154

5255
// Callback for run() if not implemented
5356
void (*_onRun)(void);
@@ -65,13 +68,16 @@ class Thread{
6568
String ThreadName;
6669
#endif
6770

68-
Thread(void (*callback)(void) = NULL, long _interval = 0);
71+
Thread(void (*callback)(void) = NULL, unsigned long _interval = 0);
6972

7073
// Set the desired interval for calls, and update _cached_next_run
71-
virtual void setInterval(long _interval);
74+
virtual void setInterval(unsigned long _interval);
7275

7376
// Return if the Thread should be runned or not
74-
virtual bool shouldRun(long time = -1);
77+
virtual bool shouldRun(unsigned long time);
78+
79+
// Default is to check whether it should run "now"
80+
bool shouldRun() { return shouldRun(millis()); }
7581

7682
// Callback set
7783
void onRun(void (*callback)(void));

ThreadController.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include "Thread.h"
22
#include "ThreadController.h"
33

4-
ThreadController::ThreadController(long _interval): Thread(){
4+
ThreadController::ThreadController(unsigned long _interval): Thread(){
55
cached_size = 0;
66

77
clear();
@@ -22,7 +22,7 @@ void ThreadController::run(){
2222
if(_onRun != NULL)
2323
_onRun();
2424

25-
long time = millis();
25+
unsigned long time = millis();
2626
int checks = 0;
2727
for(int i = 0; i < MAX_THREADS && checks <= cached_size; i++){
2828
// Object exists? Is enabled? Timeout exceeded?
@@ -112,4 +112,4 @@ Thread* ThreadController::get(int index){
112112
}
113113

114114
return NULL;
115-
}
115+
}

ThreadController.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class ThreadController: public Thread{
2626
Thread* thread[MAX_THREADS];
2727
int cached_size;
2828
public:
29-
ThreadController(long _interval = 0);
29+
ThreadController(unsigned long _interval = 0);
3030

3131
// run() Method is overrided
3232
void run();

0 commit comments

Comments
 (0)