mirror of
https://github.com/QuantumLeaps/qpc.git
synced 2025-01-14 06:43:19 +08:00
6.4.0
This commit is contained in:
parent
5d14aa368a
commit
6e0d9ad892
@ -5,7 +5,7 @@
|
|||||||
* @cond
|
* @cond
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* Last updated for version 6.4.0
|
* Last updated for version 6.4.0
|
||||||
* Last updated on 2019-02-07
|
* Last updated on 2019-02-12
|
||||||
*
|
*
|
||||||
* Q u a n t u m L e a P s
|
* Q u a n t u m L e a P s
|
||||||
* ------------------------
|
* ------------------------
|
||||||
@ -138,12 +138,11 @@ void QF_setTickRate(uint32_t ticksPerSec, int_t tickPrio) {
|
|||||||
}
|
}
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
void QF_setWin32Prio(QActive *act, int_t win32Prio) {
|
void QF_setWin32Prio(QActive *act, int_t win32Prio) {
|
||||||
if (act->thread == (HANDLE)0) { /* thread not created yet? */
|
HANDLE win32thread = (HANDLE)act->thread;
|
||||||
act->osObject = (void *)win32Prio; /* store the priority for later */
|
|
||||||
}
|
/* thread must be already created, see QActive_start_() */
|
||||||
else {
|
Q_REQUIRE_ID(700, win32thread != (HANDLE)0);
|
||||||
SetThreadPriority(act->thread, win32Prio);
|
SetThreadPriority(win32thread, win32Prio);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* QActive functions =======================================================*/
|
/* QActive functions =======================================================*/
|
||||||
@ -152,23 +151,15 @@ void QActive_start_(QActive * const me, uint_fast8_t prio,
|
|||||||
void *stkSto, uint_fast16_t stkSize,
|
void *stkSto, uint_fast16_t stkSize,
|
||||||
QEvt const *ie)
|
QEvt const *ie)
|
||||||
{
|
{
|
||||||
int win32Prio;
|
Q_REQUIRE_ID(800, ((uint_fast8_t)0 < prio) /* priority must be in range */
|
||||||
|
|
||||||
Q_REQUIRE_ID(700, ((uint_fast8_t)0 < prio) /* priority must be in range */
|
|
||||||
&& (prio <= (uint_fast8_t)QF_MAX_ACTIVE)
|
&& (prio <= (uint_fast8_t)QF_MAX_ACTIVE)
|
||||||
&& (stkSto == (void *)0)); /* statck storage must NOT...
|
&& (stkSto == (void *)0)); /* statck storage must NOT...
|
||||||
* ... be provided */
|
* ... be provided */
|
||||||
|
|
||||||
me->prio = prio; /* set QF priority of this AO before adding it to QF */
|
me->prio = prio; /* set QF priority of this AO before adding it to QF */
|
||||||
QF_add_(me); /* make QF aware of this active object */
|
QF_add_(me); /* make QF aware of this active object */
|
||||||
|
|
||||||
QEQueue_init(&me->eQueue, qSto, qLen);
|
QEQueue_init(&me->eQueue, qSto, qLen);
|
||||||
|
|
||||||
/* save osObject as integer, in case it contains the Win32 priority */
|
|
||||||
win32Prio = (me->osObject != (void *)0)
|
|
||||||
? (int)me->osObject
|
|
||||||
: THREAD_PRIORITY_NORMAL;
|
|
||||||
|
|
||||||
/* create the Win32 "event" to throttle the AO's event queue */
|
/* create the Win32 "event" to throttle the AO's event queue */
|
||||||
me->osObject = CreateEvent(NULL, FALSE, FALSE, NULL);
|
me->osObject = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||||
|
|
||||||
@ -184,12 +175,7 @@ void QActive_start_(QActive * const me, uint_fast8_t prio,
|
|||||||
* The thread is created with THREAD_PRIORITY_NORMAL
|
* The thread is created with THREAD_PRIORITY_NORMAL
|
||||||
*/
|
*/
|
||||||
me->thread = CreateThread(NULL, stkSize, &ao_thread, me, 0, NULL);
|
me->thread = CreateThread(NULL, stkSize, &ao_thread, me, 0, NULL);
|
||||||
Q_ASSERT_ID(730, me->thread != (HANDLE)0); /* must succeed */
|
Q_ENSURE_ID(830, me->thread != (HANDLE)0); /* must succeed */
|
||||||
|
|
||||||
/* was the thread priority provided? */
|
|
||||||
if (win32Prio != 0) {
|
|
||||||
SetThreadPriority(me->thread, win32Prio);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
@ -4,14 +4,14 @@
|
|||||||
* @ingroup ports
|
* @ingroup ports
|
||||||
* @cond
|
* @cond
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* Last Updated for Version: 6.3.7
|
* Last Updated for Version: 6.4.0
|
||||||
* Date of the Last Update: 2018-11-17
|
* Date of the Last Update: 2019-02-12
|
||||||
*
|
*
|
||||||
* Q u a n t u m L e a P s
|
* Q u a n t u m L e a P s
|
||||||
* ------------------------
|
* ------------------------
|
||||||
* Modern Embedded Software
|
* Modern Embedded Software
|
||||||
*
|
*
|
||||||
* Copyright (C) 2005-2018 Quantum Leaps, LLC. All rights reserved.
|
* Copyright (C) 2005-2019 Quantum Leaps. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is open source software: you can redistribute it and/or
|
* This program is open source software: you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License as published
|
* modify it under the terms of the GNU General Public License as published
|
||||||
@ -74,8 +74,9 @@
|
|||||||
void QF_enterCriticalSection_(void);
|
void QF_enterCriticalSection_(void);
|
||||||
void QF_leaveCriticalSection_(void);
|
void QF_leaveCriticalSection_(void);
|
||||||
|
|
||||||
/* set Win32 thread priority;
|
/* set Win32 thread priority for an active object;
|
||||||
* can be called either before or after QACTIVE_START().
|
* see: Microsoft documentation for SetThreadPriority()
|
||||||
|
* NOTE: must be called *after* QACTIVE_START()
|
||||||
*/
|
*/
|
||||||
void QF_setWin32Prio(QActive *act, int_t win32Prio);
|
void QF_setWin32Prio(QActive *act, int_t win32Prio);
|
||||||
|
|
||||||
@ -103,6 +104,7 @@ int QF_consoleWaitForKey(void);
|
|||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
|
||||||
#if (_MSC_VER < 1900) /* before Visual Studio 2015 */
|
#if (_MSC_VER < 1900) /* before Visual Studio 2015 */
|
||||||
|
|
||||||
#define snprintf _snprintf
|
#define snprintf _snprintf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -115,7 +117,7 @@ int QF_consoleWaitForKey(void);
|
|||||||
#define FOPEN_S(fp_, fName_, mode_) \
|
#define FOPEN_S(fp_, fName_, mode_) \
|
||||||
if (fopen_s(&fp_, fName_, mode_) != 0) { \
|
if (fopen_s(&fp_, fName_, mode_) != 0) { \
|
||||||
fp_ = (FILE *)0; \
|
fp_ = (FILE *)0; \
|
||||||
} else (void)0
|
} else ((void)0)
|
||||||
|
|
||||||
#define CTIME_S(buf_, len_, time_) \
|
#define CTIME_S(buf_, len_, time_) \
|
||||||
ctime_s((char *)buf_, len_, time_)
|
ctime_s((char *)buf_, len_, time_)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user