1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 #ifndef INCLUDED_SALHELPER_THREAD_HXX
11 #define INCLUDED_SALHELPER_THREAD_HXX
13 #include <sal/config.h>
17 #include <osl/thread.hxx>
18 #include <sal/types.h>
19 #include <salhelper/salhelperdllapi.h>
20 #include <salhelper/simplereferenceobject.hxx>
25 A safe encapsulation of ::osl::Thread.
27 @since LibreOffice 3.6
29 class SALHELPER_DLLPUBLIC Thread
:
30 public salhelper::SimpleReferenceObject
, private osl::Thread
34 @param name the thread name, see ::osl_setThreadName; must be a non-null
35 null terminated string
37 Thread(char const * name
);
42 This function must be called at most once.
44 Each call of this function should eventually be followed by a call to
45 ::osl::Thread::join before exit(3), to ensure the thread is no longer
46 relying on any infrastructure while that infrastructure is being shut
47 down in atexit handlers.
51 using osl::Thread::getIdentifier
;
52 using osl::Thread::join
;
53 using osl::Thread::schedule
;
54 using osl::Thread::terminate
;
56 // While the below static member functions should arguably always be called
57 // with qualified (osl::Thread) names, compilers would still complain that
58 // they are inaccessible from within derivations of salhelper::Thread (an
59 // alternative would be to force such derivations to use global names,
60 // prefixed with ::osl::Thread):
61 using osl::Thread::getCurrentIdentifier
;
62 using osl::Thread::wait
;
63 using osl::Thread::yield
;
65 static inline void * operator new(std::size_t size
)
66 { return SimpleReferenceObject::operator new(size
); }
68 static inline void operator delete(void * pointer
)
69 { SimpleReferenceObject::operator delete(pointer
); }
75 The main function executed by the thread.
77 Any uncaught exceptions lead to std::terminate.
79 virtual void execute() = 0;
82 virtual void SAL_CALL
run() SAL_OVERRIDE
;
84 virtual void SAL_CALL
onTerminated() SAL_OVERRIDE
;
93 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */