mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-06-04 18:54:00 +08:00
Introduce a portable EIGEN_SLEEP macro.
This commit is contained in:
parent
aafa97f4d2
commit
4deafd35b7
@ -53,8 +53,10 @@ typedef __int32 int32_t;
|
|||||||
typedef unsigned __int32 uint32_t;
|
typedef unsigned __int32 uint32_t;
|
||||||
typedef __int64 int64_t;
|
typedef __int64 int64_t;
|
||||||
typedef unsigned __int64 uint64_t;
|
typedef unsigned __int64 uint64_t;
|
||||||
|
#include <windows.h>
|
||||||
#else
|
#else
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __cplusplus > 199711 || EIGEN_COMP_MSVC >= 1900
|
#if __cplusplus > 199711 || EIGEN_COMP_MSVC >= 1900
|
||||||
|
@ -88,11 +88,7 @@ static void initializeDeviceProp() {
|
|||||||
#if __cplusplus >= 201103L
|
#if __cplusplus >= 201103L
|
||||||
std::atomic_thread_fence(std::memory_order_acquire);
|
std::atomic_thread_fence(std::memory_order_acquire);
|
||||||
#endif
|
#endif
|
||||||
#if EIGEN_OS_WIN || EIGEN_OS_WIN64
|
EIGEN_SLEEP(1000);
|
||||||
Sleep(1000);
|
|
||||||
#else
|
|
||||||
sleep(1);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,4 +51,10 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if EIGEN_OS_WIN || EIGEN_OS_WIN64
|
||||||
|
#define EIGEN_SLEEP(n) Sleep(n)
|
||||||
|
#else
|
||||||
|
#define EIGEN_SLEEP(n) sleep(n*1000)
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
#define EIGEN_USE_THREADS
|
#define EIGEN_USE_THREADS
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include <unistd.h>
|
|
||||||
#include "Eigen/CXX11/ThreadPool"
|
#include "Eigen/CXX11/ThreadPool"
|
||||||
|
#include "Eigen/CXX11/Tensor"
|
||||||
|
|
||||||
static void test_create_destroy_empty_pool()
|
static void test_create_destroy_empty_pool()
|
||||||
{
|
{
|
||||||
@ -109,7 +109,7 @@ static void test_cancel()
|
|||||||
// Schedule a large number of closure that each sleeps for one second. This
|
// Schedule a large number of closure that each sleeps for one second. This
|
||||||
// will keep the thread pool busy for much longer than the default test timeout.
|
// will keep the thread pool busy for much longer than the default test timeout.
|
||||||
for (int i = 0; i < 1000; ++i) {
|
for (int i = 0; i < 1000; ++i) {
|
||||||
tp.Schedule([]() { sleep(2); });
|
tp.Schedule([]() { EIGEN_SLEEP(2000); });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cancel the processing of all the closures that are still pending.
|
// Cancel the processing of all the closures that are still pending.
|
||||||
|
@ -13,15 +13,6 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include <Eigen/CXX11/Tensor>
|
#include <Eigen/CXX11/Tensor>
|
||||||
|
|
||||||
#if EIGEN_OS_WIN || EIGEN_OS_WIN64
|
|
||||||
#include <windows.h>
|
|
||||||
void sleep(int seconds) {
|
|
||||||
Sleep(seconds*1000);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#include <unistd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
@ -40,7 +31,7 @@ static void test_notification_single()
|
|||||||
Eigen::Notification n;
|
Eigen::Notification n;
|
||||||
std::function<void()> func = std::bind(&WaitAndAdd, &n, &counter);
|
std::function<void()> func = std::bind(&WaitAndAdd, &n, &counter);
|
||||||
thread_pool.Schedule(func);
|
thread_pool.Schedule(func);
|
||||||
sleep(1);
|
EIGEN_SLEEP(1000);
|
||||||
|
|
||||||
// The thread should be waiting for the notification.
|
// The thread should be waiting for the notification.
|
||||||
VERIFY_IS_EQUAL(counter, 0);
|
VERIFY_IS_EQUAL(counter, 0);
|
||||||
@ -48,7 +39,7 @@ static void test_notification_single()
|
|||||||
// Unblock the thread
|
// Unblock the thread
|
||||||
n.Notify();
|
n.Notify();
|
||||||
|
|
||||||
sleep(1);
|
EIGEN_SLEEP(1000);
|
||||||
|
|
||||||
// Verify the counter has been incremented
|
// Verify the counter has been incremented
|
||||||
VERIFY_IS_EQUAL(counter, 1);
|
VERIFY_IS_EQUAL(counter, 1);
|
||||||
@ -67,10 +58,10 @@ static void test_notification_multiple()
|
|||||||
thread_pool.Schedule(func);
|
thread_pool.Schedule(func);
|
||||||
thread_pool.Schedule(func);
|
thread_pool.Schedule(func);
|
||||||
thread_pool.Schedule(func);
|
thread_pool.Schedule(func);
|
||||||
sleep(1);
|
EIGEN_SLEEP(1000);
|
||||||
VERIFY_IS_EQUAL(counter, 0);
|
VERIFY_IS_EQUAL(counter, 0);
|
||||||
n.Notify();
|
n.Notify();
|
||||||
sleep(1);
|
EIGEN_SLEEP(1000);
|
||||||
VERIFY_IS_EQUAL(counter, 4);
|
VERIFY_IS_EQUAL(counter, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user