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)
155 virtual ~KviMutex() { kvi_threadMutexDestroy(&m_mutex); };
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; };
172 kvi_threadMutexLock(&m_mutex);
174 void unlock() { kvi_threadMutexUnlock(&m_mutex); };
213 void internalThreadRun_doNotTouchThis();
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
284 : QEvent((QEvent::Type)
KVI_THREAD_EVENT), m_eventId(evId), m_pSender(sender){};
291 int id() {
return m_eventId; };
294template <
class TData>
381 static void killPendingEvents(QObject * receiver);
384#if !defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MINGW)
390#if !defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MINGW)
400 void threadEnteredWaitState();
401 void threadLeftWaitState();
403 void postSlaveEvent(QObject *
o, QEvent *
e);
404 void killPendingEventsByReceiver(QObject * receiver);
406 static void globalInit();
407 static void globalDestroy();
409 void eventsPending(
int fd);
C++ Template based double linked pointer list class.
#define KVI_THREAD_EVENT
Definition KviThread.h:237
Definition KviApplication.h:106
Definition KviHeapObject.h:125
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
Definition KviThread.h:334
KviPointerList< KviThreadEvent > * m_pLocalEventQueue
Definition KviThread.h:341
KviMutex * m_pLocalEventQueueMutex
Definition KviThread.h:340
Definition KviThread.h:296
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
Definition KviThread.h:370
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
int m_iTriggerCount
Definition KviThread.h:393
KviPointerList< KviThreadPendingEvent > * m_pEventQueue
Definition KviThread.h:391
Definition KviThread.h:183
kvi_thread_t m_thread
Definition KviThread.h:189
bool m_bRunning
Definition KviThread.h:190
bool m_bStartingUp
Definition KviThread.h:191
virtual void run()
Definition KviThread.h:224
KviPointerList< QEvent > * m_pLocalEventQueue
Definition KviThread.h:193
KviMutex * m_pRunningMutex
Definition KviThread.h:192
#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