Deskflow 1.24.0.365
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
IArchMultithread.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
4 * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
5 * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
6 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
7 */
8
9#pragma once
10
11#include <cstdint>
12
19class ArchCondImpl;
20
27
33class ArchMutexImpl;
34
41
47class ArchThreadImpl;
48
55
57
62{
63public:
65 using ThreadFunc = void *(*)(void *);
67 using ThreadID = unsigned int;
68
69 virtual ~IArchMultithread() = default;
71
83
84 using SignalFunc = void (*)(ThreadSignal, void *userData);
85
87
88
89 //
90 // condition variable methods
91 //
92
94
97 virtual ArchCond newCondVar() = 0;
98
100 virtual void closeCondVar(ArchCond) = 0;
101
103
106 virtual void signalCondVar(ArchCond) = 0;
107
109
112 virtual void broadcastCondVar(ArchCond) = 0;
113
115
125 virtual bool waitCondVar(ArchCond, ArchMutex, double timeout) = 0;
126
127 //
128 // mutex methods
129 //
130
132
137 virtual ArchMutex newMutex() = 0;
138
140 virtual void closeMutex(ArchMutex) = 0;
141
143 virtual void lockMutex(ArchMutex) = 0;
144
146 virtual void unlockMutex(ArchMutex) = 0;
147
148 //
149 // thread methods
150 //
151
153
157 virtual ArchThread newThread(ThreadFunc func, void *userData) = 0;
158
160
164
166
169 virtual ArchThread copyThread(ArchThread thread) = 0;
170
172
178 virtual void closeThread(ArchThread) = 0;
179
181
188 virtual void cancelThread(ArchThread thread) = 0;
189
191
196 virtual void setPriorityOfThread(ArchThread, int n) = 0;
197
199
206 virtual void testCancelThread() = 0;
207
209
217 virtual bool wait(ArchThread thread, double timeout) = 0;
218
220
225
227
230 virtual bool isExitedThread(ArchThread thread) = 0;
231
233
239 virtual void *getResultOfThread(ArchThread thread) = 0;
240
242
248 virtual ThreadID getIDOfThread(ArchThread thread) = 0;
249
251
255 virtual void setSignalHandler(ThreadSignal, SignalFunc func, void *userData) = 0;
256
258
263 virtual void raiseSignal(ThreadSignal signal) = 0;
264
266};
static fd_set FAR fd_set FAR fd_set FAR const struct timeval FAR * timeout
Definition ArchNetworkWinsock.cpp:40
static int(PASCAL FAR *bind_winsock)(SOCKET s
ArchThreadImpl * ArchThread
Opaque thread type. An opaque type representing a thread.
Definition IArchMultithread.h:54
ArchMutexImpl * ArchMutex
Opaque mutex type. An opaque type representing a mutex.
Definition IArchMultithread.h:40
ArchCondImpl * ArchCond
Opaque condition variable type. An opaque type representing a condition variable.
Definition IArchMultithread.h:26
Internal condition variable data. An architecture dependent type holding the necessary data for a con...
Definition ArchMultithreadPosix.h:19
Internal mutex data. An architecture dependent type holding the necessary data for a mutex.
Definition ArchMultithreadPosix.h:25
Internal thread data. An architecture dependent type holding the necessary data for a thread.
Definition ArchMultithreadPosix.cpp:34
Interface for architecture dependent multithreading.
Definition IArchMultithread.h:62
virtual void testCancelThread()=0
Cancellation point.
virtual void signalCondVar(ArchCond)=0
Signal a condition variable.
virtual void closeThread(ArchThread)=0
Release a thread reference.
virtual ThreadID getIDOfThread(ArchThread thread)=0
Returns an ID for a thread.
virtual void lockMutex(ArchMutex)=0
Lock a mutex.
virtual void closeMutex(ArchMutex)=0
Destroy a mutex.
virtual void unlockMutex(ArchMutex)=0
Unlock a mutex.
virtual bool waitCondVar(ArchCond, ArchMutex, double timeout)=0
Wait on a condition variable.
virtual ArchThread newCurrentThread()=0
Get a reference to the calling thread.
virtual void closeCondVar(ArchCond)=0
Destroy a condition variable.
virtual void setPriorityOfThread(ArchThread, int n)=0
Change thread priority.
virtual void raiseSignal(ThreadSignal signal)=0
Invoke the signal handler.
void *(*)(void *) ThreadFunc
Type of thread entry point.
Definition IArchMultithread.h:65
unsigned int ThreadID
Type of thread identifier.
Definition IArchMultithread.h:67
void(*)(ThreadSignal, void *userData) SignalFunc
Type of signal handler function.
Definition IArchMultithread.h:84
virtual ~IArchMultithread()=default
virtual ArchThread copyThread(ArchThread thread)=0
Copy a thread object.
virtual void setSignalHandler(ThreadSignal, SignalFunc func, void *userData)=0
Set the interrupt handler.
virtual void * getResultOfThread(ArchThread thread)=0
Returns the exit code of a thread.
virtual bool isExitedThread(ArchThread thread)=0
Test if thread exited.
virtual ArchMutex newMutex()=0
Create a recursive mutex.
ThreadSignal
Types of signals.
Definition IArchMultithread.h:76
@ Terminate
Terminate (e.g. Ctrl+Break).
Definition IArchMultithread.h:78
@ Interrupt
Interrupt (e.g. Ctrl+C).
Definition IArchMultithread.h:77
@ MaxSignals
Number of differnt signals.
Definition IArchMultithread.h:81
@ Hangup
Hangup (SIGHUP).
Definition IArchMultithread.h:79
@ User
User (SIGUSR2).
Definition IArchMultithread.h:80
virtual bool wait(ArchThread thread, double timeout)=0
Wait for a thread to exit.
virtual ArchCond newCondVar()=0
Create a condition variable.
virtual ArchThread newThread(ThreadFunc func, void *userData)=0
Start a new thread.
virtual bool isSameThread(ArchThread, ArchThread)=0
Compare threads.
virtual void cancelThread(ArchThread thread)=0
Force a thread to exit.
virtual void broadcastCondVar(ArchCond)=0
Broadcast a condition variable.