/* Copyright (C) 2018-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: Dk4WxProcessingController.cpt */ #ifndef DK4WXPROCESSINGCONTROLLER_H_INCLUDED /** Avoid multiple inclusions. */ #define DK4WXPROCESSINGCONTROLLER_H_INCLUDED 1 #line 8 "Dk4WxProcessingController.cpt" /** @file Dk4WxProcessingController.h Processing controller to skip concurrent execution of code accessing the same variables. @code class AnyClass { protected: Dk4WxProcessingController procon; ... }; AnyClass::SomeMethod(void) { if (procon.CanEnterCriticalSection()) { ... Yes, we are allowed to execute code accessing variable ... ... ... Notify the controller that we are done ... procon.LeaveCriticalSection(); } else { ... No, we are not allowed to access the variables ... } } @endcode */ #ifndef DK4CONF_H_INCLUDED #include #endif #include #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include #endif #ifndef WX_THREAD_H_INCLUDED #include #define WX_THREAD_H_INCLUDED 1 #endif /** Protect code from concurrent execution, mainly for timer handlers. In contrast to a critical section which delays execution of code to avoid concurrent access to data this class skips the execution of concurrent code. */ class Dk4WxProcessingController { protected: /** Critical section to protect the "in use" flag. */ wxCriticalSection csProtect; /** Flag to mark section as currently in use. */ bool bInUse; public: /** Constructor */ Dk4WxProcessingController(void); /** Check whether the critical code section can be entered. @return True if the section can be entered, false otherwise. If the method returns true, the bInUse flag is set, you must call LeaveCriticalSection() to reset it. */ bool CanEnterCriticalSection(void); /** LeaveCriticalSection the critical section. */ void LeaveCriticalSection(void); }; /* vim: set ai sw=4 ts=4 : */ #endif