1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
#include "tut.h"
#include <boost/bind.hpp>
#include <oxt/thread.hpp>
#include <oxt/system_calls.hpp>
#include <unistd.h>
#include <ctime>
using namespace oxt;
using namespace std;
namespace tut {
struct syscall_interruption_test {
};
DEFINE_TEST_GROUP(syscall_interruption_test);
struct SleepFunction {
void operator()() {
syscalls::usleep(6000000);
}
};
TEST_METHOD(1) {
// System call interruption works.
SleepFunction s;
oxt::thread thr(s);
usleep(20000);
time_t begin, end, time_spent_in_thread;
begin = time(NULL);
thr.interrupt_and_join();
end = time(NULL);
time_spent_in_thread = end - begin;
ensure(time_spent_in_thread <= 2);
}
}
|