Added inter thread communication lib
git-svn-id: svn://db.shs.com.ru/pip@858 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
48
src_main/concurrent/piconditionvar.h
Normal file
48
src_main/concurrent/piconditionvar.h
Normal file
@@ -0,0 +1,48 @@
|
||||
//
|
||||
// Created by fomenko on 20.09.2019.
|
||||
//
|
||||
|
||||
#ifndef PIP_TESTS_PICONDITIONVAR_H
|
||||
#define PIP_TESTS_PICONDITIONVAR_H
|
||||
|
||||
#include "piconditionlock.h"
|
||||
#include <functional>
|
||||
#include "piinit.h"
|
||||
|
||||
#define PICONDITION_RELIABLE true
|
||||
|
||||
class PIP_EXPORT PIConditionVariable {
|
||||
public:
|
||||
explicit PIConditionVariable();
|
||||
virtual ~PIConditionVariable();
|
||||
|
||||
virtual void notifyOne();
|
||||
virtual void notifyAll();
|
||||
virtual void wait(PIConditionLock& lk);
|
||||
virtual void wait(PIConditionLock& lk, const std::function<bool()>& condition);
|
||||
virtual bool waitFor(PIConditionLock& lk, int timeoutMs);
|
||||
virtual bool waitFor(PIConditionLock& lk, int timeoutMs, const std::function<bool()>& condition);
|
||||
private:
|
||||
NO_COPY_CLASS(PIConditionVariable)
|
||||
|
||||
PRIVATE_DECLARATION
|
||||
};
|
||||
|
||||
|
||||
class PIThread;
|
||||
typedef void (*ThreadFunc)(void * );
|
||||
|
||||
class StdFunctionThreadFuncAdapter {
|
||||
public:
|
||||
static void threadFuncStdFunctionAdapter(void* it);
|
||||
|
||||
explicit StdFunctionThreadFuncAdapter(const std::function<void()>& fun_): fun(fun_) {}
|
||||
|
||||
void registerToInvoke(PIThread* thread);
|
||||
void* data() const { return (void*)this; }
|
||||
ThreadFunc threadFunc() const { return threadFuncStdFunctionAdapter; }
|
||||
private:
|
||||
std::function<void()> fun;
|
||||
};
|
||||
|
||||
#endif //PIP_TESTS_PICONDITIONVAR_H
|
||||
Reference in New Issue
Block a user