version 4.5.0

PIThread::stopAndWait now returns bool
PIKbdListener on Linux now use piwaitevent_p and can immediately stop
new base method piZeroMemory, also migrate all "memset 0" to piZeroMemory
This commit is contained in:
2024-12-29 11:48:24 +03:00
parent 49713ddc57
commit 15548de79c
27 changed files with 121 additions and 89 deletions

View File

@@ -58,7 +58,7 @@ PIConditionVariable::PIConditionVariable() {
# if !defined(MAC_OS)
pthread_condattr_setclock(&condattr, CLOCK_MONOTONIC);
# endif
memset(&(PRIVATE->nativeHandle), 0, sizeof(PRIVATE->nativeHandle));
piZeroMemory(PRIVATE->nativeHandle);
pthread_cond_init(&PRIVATE->nativeHandle, &condattr);
#endif
}

View File

@@ -209,10 +209,10 @@ void PIMutex::init() {
PRIVATE->mutex = xSemaphoreCreateMutex();
#else
pthread_mutexattr_t attr;
memset(&attr, 0, sizeof(attr));
piZeroMemory(attr);
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
memset(&(PRIVATE->mutex), 0, sizeof(PRIVATE->mutex));
piZeroMemory(PRIVATE->mutex);
pthread_mutex_init(&(PRIVATE->mutex), &attr);
pthread_mutexattr_destroy(&attr);
#endif

View File

@@ -651,9 +651,9 @@ bool PIThread::startOnce(std::function<void()> func) {
}
void PIThread::stopAndWait(PISystemTime timeout) {
bool PIThread::stopAndWait(PISystemTime timeout) {
stop();
waitForFinish(timeout);
return waitForFinish(timeout);
}
@@ -791,7 +791,7 @@ void PIThread::setPriority(PIThread::Priority prior) {
# ifndef WINDOWS
// PICout(PICoutManipulators::DefaultControls) << "setPriority" << PRIVATE->thread;
int policy_ = 0;
memset(&(PRIVATE->sparam), 0, sizeof(PRIVATE->sparam));
piZeroMemory(PRIVATE->sparam);
pthread_getschedparam(PRIVATE->thread, &policy_, &(PRIVATE->sparam));
PRIVATE->sparam.
# ifndef LINUX

View File

@@ -143,15 +143,13 @@ public:
EVENT_HANDLER0(void, stop);
EVENT_HANDLER0(void, terminate);
//! \~english Stop thread and wait for finish.
//! \~russian Останавливает поток и ожидает завершения.
void stopAndWait(int timeout_ms) DEPRECATEDM("use waitForStart(PISystemTime)") {
stopAndWait(PISystemTime::fromMilliseconds(timeout_ms));
bool stopAndWait(int timeout_ms) DEPRECATEDM("use stopAndWait(PISystemTime)") {
return stopAndWait(PISystemTime::fromMilliseconds(timeout_ms));
}
//! \~english Stop thread and wait for finish.
//! \~russian Останавливает поток и ожидает завершения.
void stopAndWait(PISystemTime timeout = {});
//! \~english Stop thread and wait for finish. Returns \b false if timeout expired.
//! \~russian Останавливает поток и ожидает завершения. Возвращает \b false если таймаут истек.
bool stopAndWait(PISystemTime timeout = {});
//! \~english Set common data passed to external function
//! \~russian Устанавливает данные, передаваемые в функцию потока
@@ -194,8 +192,8 @@ public:
return waitForStart(PISystemTime::fromMilliseconds(timeout_msecs));
}
//! \~english Wait for thread finish
//! \~russian Ожидает завершения потока
//! \~english Wait for thread finish. Returns \b false if timeout expired.
//! \~russian Ожидает завершения потока. Возвращает \b false если таймаут истек.
bool waitForFinish(PISystemTime timeout = {});
bool waitForFinish(int timeout_msecs) DEPRECATEDM("use waitForFinish(PISystemTime)") {
return waitForFinish(PISystemTime::fromMilliseconds(timeout_msecs));