44#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)
48#define kvi_mutex_t HANDLE
49inline void kvi_threadMutexInit(kvi_mutex_t * _pMutex_t)
51 *_pMutex_t = CreateMutex(0, 0, NULL);
53#define kvi_threadMutexLock(_pMutex_t) WaitForSingleObject(*_pMutex_t, INFINITE)
54#define kvi_threadMutexUnlock(_pMutex_t) ReleaseMutex(*_pMutex_t)
55#define kvi_threadMutexDestroy(_pMutex_t) CloseHandle(*_pMutex_t)
56inline bool kvi_threadMutexTryLock(kvi_mutex_t * _pMutex_t)
58 return (WaitForSingleObject(*_pMutex_t, 0) == WAIT_OBJECT_0);
61#define kvi_thread_t HANDLE
63inline bool kvi_threadCreate(kvi_thread_t *
t, LPTHREAD_START_ROUTINE start_routine,
void * arg)
66 *
t = CreateThread(NULL, 0, start_routine, arg, 0, &dwThreadId);
70#define kvi_threadExit() ExitThread(0)
73#ifdef COMPILE_THREADS_USE_POSIX
80#define kvi_mutex_t pthread_mutex_t
81#define kvi_threadMutexInit(_pMutex_t) pthread_mutex_init(_pMutex_t, 0)
82#define kvi_threadMutexLock(_pMutex_t) pthread_mutex_lock(_pMutex_t)
83#define kvi_threadMutexUnlock(_pMutex_t) pthread_mutex_unlock(_pMutex_t)
84#define kvi_threadMutexDestroy(_pMutex_t) pthread_mutex_destroy(_pMutex_t)
85inline bool kvi_threadMutexTryLock(kvi_mutex_t * _pMutex_t)
87 return (pthread_mutex_trylock(_pMutex_t) != EBUSY);
93#define kvi_thread_t pthread_t
95inline bool kvi_threadCreate(kvi_thread_t *
t,
void * (*start_routine)(
void *),
void * arg)
98 pthread_attr_init(&
a);
99 pthread_attr_setinheritsched(&
a, PTHREAD_INHERIT_SCHED);
100 pthread_attr_setdetachstate(&
a, PTHREAD_CREATE_DETACHED);
102 int ret = pthread_create(
t, &
a, start_routine, arg);
104 pthread_attr_destroy(&
a);
109#define kvi_threadExit() pthread_exit(0)
111#ifdef COMPILE_THREADS_USE_SOLARIS_LIBTHREAD
118#define kvi_mutex_t mutex_t
119#define kvi_threadMutexInit(_pMutex_t) mutex_init(_pMutex_t, 0, 0)
120#define kvi_threadMutexLock(_pMutex_t) mutex_lock(_pMutex_t)
121#define kvi_threadMutexUnlock(_pMutex_t) mutex_unlock(_pMutex_t)
122#define kvi_threadMutexDestroy(_pMutex_t) mutex_destroy(_pMutex_t)
123inline bool kvi_threadMutexTryLock(kvi_mutex_t * _pMutex_t)
125 return (mutex_trylock(_pMutex_t) != EBUSY);
131#define kvi_thread_t thread_t
133inline bool kvi_threadCreate(kvi_thread_t *
t,
void * (*start_routine)(
void *),
void * arg)
135 return (thr_create(0, 0, start_routine, arg, THR_DETACHED,
t) == 0);
139#define kvi_threadExit() thr_exit(0)
150#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)
157#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)
160 kvi_threadMutexLock(&m_mutex);
166 kvi_threadMutexUnlock(&m_mutex);
168 bool locked() {
return m_bLocked; };
215 static void sleep(
unsigned long sec);
216 static void msleep(
unsigned long msec);
217 static void usleep(
unsigned long usec);
229 virtual void postEvent(QObject *
o, QEvent *
e);
232 void setRunning(
bool bRunning);
233 void setStartingUp(
bool bStartingUp);
237#define KVI_THREAD_EVENT (((int)QEvent::User) + 2000)
248#define KVI_THREAD_EVENT_TERMINATE 0
256#define KVI_THREAD_EVENT_SUCCESS 100
259#define KVI_THREAD_EVENT_STATECHANGE 150
262#define KVI_THREAD_EVENT_MESSAGE 200
263#define KVI_THREAD_EVENT_WARNING 201
264#define KVI_THREAD_EVENT_ERROR 202
265#define KVI_THREAD_EVENT_DATA 203
268#define KVI_THREAD_EVENT_BINARYDATA 300
271#define KVI_THREAD_USER_EVENT_BASE 1000
294template <
class TData>
384#if !defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MINGW)
390#if !defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MINGW)
C++ Template based double linked pointer list class.
#define KVI_THREAD_EVENT
Definition KviThread.h:237
Definition KviHeapObject.h:119
Definition KviThread.h:147
void unlock()
Definition KviThread.h:174
void lock()
Definition KviThread.h:170
virtual ~KviMutex()
Definition KviThread.h:155
kvi_mutex_t m_mutex
Definition KviThread.h:149
KviMutex()
Definition KviThread.h:154
A template double linked list of pointers.
Definition KviPointerList.h:371
KviThreadEvent * dequeueEvent()
Definition KviThread.cpp:626
KviSensitiveThread()
Definition KviThread.cpp:587
KviPointerList< KviThreadEvent > * m_pLocalEventQueue
Definition KviThread.h:341
void enqueueEvent(KviThreadEvent *e)
Definition KviThread.cpp:610
void terminate()
Definition KviThread.cpp:639
KviMutex * m_pLocalEventQueueMutex
Definition KviThread.h:340
TData * data()
Definition KviThread.h:322
TData * m_pData
Definition KviThread.h:298
~KviThreadDataEvent()
Definition KviThread.h:303
TData * getData()
Definition KviThread.h:316
KviThreadDataEvent(int evId, TData *pData=nullptr, KviThread *sender=nullptr)
Definition KviThread.h:301
void setData(TData *d)
Definition KviThread.h:310
Definition KviThread.h:277
KviThreadEvent(int evId, KviThread *sender=nullptr)
Definition KviThread.h:283
KviThread * m_pSender
Definition KviThread.h:280
int m_eventId
Definition KviThread.h:279
KviThread * sender()
Definition KviThread.h:290
~KviThreadEvent()
Definition KviThread.h:285
int id()
Definition KviThread.h:291
static void killPendingEvents(QObject *receiver)
Definition KviThread.cpp:253
int m_iWaitingThreads
Definition KviThread.h:389
KviPointerList< KviThread > * m_pThreadList
Definition KviThread.h:388
KviMutex * m_pMutex
Definition KviThread.h:387
QSocketNotifier * m_pSn
Definition KviThread.h:385
friend class KviApplication
Definition KviThread.h:371
void unregisterSlaveThread(KviThread *t)
Definition KviThread.cpp:289
void registerSlaveThread(KviThread *t)
Definition KviThread.cpp:282
int m_iTriggerCount
Definition KviThread.h:393
KviPointerList< KviThreadPendingEvent > * m_pEventQueue
Definition KviThread.h:391
int m_fd[2]
Definition KviThread.h:392
void threadEnteredWaitState()
Definition KviThread.cpp:411
static void globalDestroy()
Definition KviThread.cpp:159
KviThreadManager()
Definition KviThread.cpp:165
void eventsPending(int fd)
Definition KviThread.cpp:361
void threadLeftWaitState()
Definition KviThread.cpp:418
void killPendingEventsByReceiver(QObject *receiver)
Definition KviThread.cpp:262
friend class KviThread
Definition KviThread.h:372
void postSlaveEvent(QObject *o, QEvent *e)
Definition KviThread.cpp:296
static void globalInit()
Definition KviThread.cpp:153
Definition KviThread.h:183
static void msleep(unsigned long msec)
Definition KviThread.cpp:562
bool start()
Definition KviThread.cpp:505
kvi_thread_t m_thread
Definition KviThread.h:189
bool m_bRunning
Definition KviThread.h:190
void internalThreadRun_doNotTouchThis()
Definition KviThread.cpp:537
KviThread()
Definition KviThread.cpp:456
bool isRunning()
Definition KviThread.cpp:487
bool m_bStartingUp
Definition KviThread.h:191
static void usleep(unsigned long usec)
Definition KviThread.cpp:549
virtual void run()
Definition KviThread.h:224
bool isStartingUp()
Definition KviThread.cpp:496
KviPointerList< QEvent > * m_pLocalEventQueue
Definition KviThread.h:193
KviMutex * m_pRunningMutex
Definition KviThread.h:192
static void sleep(unsigned long sec)
Definition KviThread.cpp:572
void wait()
Definition KviThread.cpp:514
#define t
Definition detector.cpp:85
#define d
Definition detector.cpp:69
#define e
Definition detector.cpp:70
#define a
Definition detector.cpp:92
#define o
Definition detector.cpp:80
This file contains compile time settings.
#define KVILIB_API
Definition kvi_settings.h:124
Definition KviThread.h:364
QEvent * e
Definition KviThread.h:366
QObject * o
Definition KviThread.h:365