libjmmcg
release_579_6_g8cffd
A C++ library containing an eclectic mix of useful, advanced components.
thread_base_impl.hpp
Go to the documentation of this file.
1
/******************************************************************************
2
** Copyright © 2004 by J.M.McGuiness, coder@hussar.me.uk
3
**
4
** This library is free software; you can redistribute it and/or
5
** modify it under the terms of the GNU Lesser General Public
6
** License as published by the Free Software Foundation; either
7
** version 2.1 of the License, or (at your option) any later version.
8
**
9
** This library is distributed in the hope that it will be useful,
10
** but WITHOUT ANY WARRANTY; without even the implied warranty of
11
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
** Lesser General Public License for more details.
13
**
14
** You should have received a copy of the GNU Lesser General Public
15
** License along with this library; if not, write to the Free Software
16
** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
*/
18
19
namespace
jmmcg
{
namespace
ppd
{
namespace
private_
{
20
21
// Implementation details..... Don't look below here!!! ;)
22
23
// "thread_base" implementation...
24
25
template
<>
inline
const
typename
thread_base
<
generic_traits
::
MS_Win32
,
heavyweight_threading
>::
thread_traits
::
api_params_type
::
suspend_count
__fastcall
26
thread_base
<
generic_traits
::
MS_Win32
,
heavyweight_threading
>::
suspend
()
noexcept
(
true
) {
27
if
(
this
->
state
()<
thread_traits
::
api_params_type
::
no_kernel_thread
) {
28
thread_params_lock
.
lock
();
29
// Critical sections don't like double-unlocking....
30
bool
locked
=
true
;
31
if
(
thread_traits
::
get_current_thread_id
()==
thread_params
.
id
) {
32
// We want to suspend ourselves - better release the lock, otherwise we'll get deadlocks.
33
thread_params_lock
.
unlock
();
34
locked
=
false
;
35
}
36
const
thread_traits
::
api_params_type
::
suspend_count
sus_ct
=
thread_traits
::
suspend
(
thread_params
);
37
if
(
locked
) {
38
thread_params_lock
.
unlock
();
39
}
40
return
sus_ct
;
41
}
else
{
42
return
0;
43
}
44
}
45
46
} } }
experimental
NT-based
NTSpecific
thread_base_impl.hpp
Generated on Tue May 11 2021 17:31:25 for libjmmcg by
1.9.2