nacos-sdk-cpp/test/testcase/testDelayedThreadPool.cpp

91 lines
2.4 KiB
C++

#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include "src/thread/DelayedThreadPool.h"
#include "src/debug/DebugAssertion.h"
#include "NacosExceptions.h"
using namespace std;
using namespace nacos;
class DelayedTask : public Task {
public:
DelayedThreadPool *executor;
uint64_t interval;// in MS
uint64_t last_exec_time;
DelayedTask() {
last_exec_time = 0;
}
void run() {
uint64_t now_ms = TimeUtils::getCurrentTimeInMs();
uint64_t interval_calc = 0;
if (last_exec_time != 0) {
interval_calc = now_ms - last_exec_time;
}
last_exec_time = now_ms;
executor->schedule(this,now_ms + interval);//interval/1000 secs later
if (executor == NULL) {
throw NacosException(NacosException::INVALID_CONFIG_PARAM, "no executor");
}
printf(">>>>>>>>>>>>>>>>>>Task %s triggered, time =%llu (%llu), interval = %llu\n", getTaskName().c_str(), now_ms/1000, now_ms, interval_calc);
sleep(1);
}
};
bool testDelayedThread() {
cout << "in function testDelayedThread" << endl;
DelayedThreadPool dtp("testDPool", 11);
dtp.start();
cout << "create tasks" << endl;
DelayedTask delayedTasks[10];
uint64_t now_ms = TimeUtils::getCurrentTimeInMs();
for (size_t i = 0; i < sizeof(delayedTasks) / sizeof(DelayedTask); i++) {
delayedTasks[i].executor = &dtp;
delayedTasks[i].interval = (i + 1) * 1000;
delayedTasks[i].setTaskName("DelayedTask-" + NacosStringOps::valueOf(i));
dtp.schedule(&delayedTasks[i], now_ms);
}
sleep(20);
cout << "call stop()" << endl;
dtp.stop();
cout << "end of test" << endl;
return true;
}
bool testDelayedThread2() {
cout << "in function testDelayedThread2 - multiple tasks triggered at the same time" << endl;
DelayedThreadPool dtp("testDPool", 11);
dtp.start();
cout << "create tasks" << endl;
DelayedTask delayedTasks[10];
uint64_t now_ms = TimeUtils::getCurrentTimeInMs();
for (size_t i = 0; i < sizeof(delayedTasks) / sizeof(DelayedTask); i++) {
delayedTasks[i].executor = &dtp;
delayedTasks[i].interval = 1000;
delayedTasks[i].setTaskName("DelayedTask-" + NacosStringOps::valueOf(i));
dtp.schedule(&delayedTasks[i], now_ms);
}
sleep(20);
cout << "call stop()" << endl;
dtp.stop();
cout << "end of test" << endl;
return true;
}