E-MailRelay

- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

gthread.cpp
Go to the documentation of this file.
1 //
2 // Copyright (C) 2001-2018 Graeme Walker <graeme_walker@users.sourceforge.net>
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // This program 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
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
16 // ===
17 //
18 // gthread.cpp
19 //
20
21 #include "gdef.h"
22
23 namespace
24 {
25 void test_fn( void ) {}
26 }
27
28 bool G::threading::works()
29 {
30 if( using_std_thread )
31 {
32 static bool first = true ;
33 static bool result = false ;
34 if( first )
35 {
36 first = false ;
37 try
38 {
39 threading::thread_type t( test_fn ) ;
40 t.join() ;
41 threading::mutex_type mutex ;
42 threading::lock_type lock( mutex ) ;
43 result = true ;
44 }
45 catch(...)
46 {
47 // eg. gcc std::thread builds okay with -std=c++11 but throws
48 // at run-time if not also built with "-pthread" -- also, linking
49 // with -lGL suppresses linking with libpthread.so and breaks
50 // threading at run-time -- also, gcc 4.8 bugs
51 result = false ;
52 }
53 }
54 return result ;
55 }
56 else
57 {
58 return false ;
59 }
60 }
61
62 /// \file gthread.cpp