/src/libreoffice/salhelper/source/thread.cxx
Line | Count | Source |
1 | | /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
2 | | /* |
3 | | * This file is part of the LibreOffice project. |
4 | | * |
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/. |
8 | | */ |
9 | | |
10 | | #include <sal/config.h> |
11 | | |
12 | | #include <stdexcept> |
13 | | #include <string> |
14 | | |
15 | | #include <comphelper/scopeguard.hxx> |
16 | | #include <sal/log.hxx> |
17 | | #include <salhelper/thread.hxx> |
18 | | |
19 | 32.0k | salhelper::Thread::Thread(char const * name): name_(name) {} |
20 | | |
21 | 32.0k | void salhelper::Thread::launch() { |
22 | 32.0k | SAL_INFO("salhelper.thread", "launch " << name_); |
23 | | // Assumption is that osl::Thread::create returns normally with a true |
24 | | // return value iff it causes osl::Thread::run to start executing: |
25 | 32.0k | acquire(); |
26 | 32.0k | comphelper::ScopeGuard g([this] { release(); }); |
27 | 32.0k | if (!create()) { |
28 | 0 | throw std::runtime_error("osl::Thread::create failed"); |
29 | 0 | } |
30 | 32.0k | g.dismiss(); |
31 | 32.0k | } |
32 | | |
33 | 32.0k | salhelper::Thread::~Thread() {} |
34 | | |
35 | 32.0k | void salhelper::Thread::run() { |
36 | | // Work around the problem that onTerminated is not called if run throws an exception: |
37 | 32.0k | comphelper::ScopeGuard g([this] { onTerminated(); }); |
38 | 32.0k | setName(name_); |
39 | 32.0k | execute(); |
40 | 32.0k | g.dismiss(); |
41 | 32.0k | } |
42 | | |
43 | 32.0k | void salhelper::Thread::onTerminated() { release(); } |
44 | | |
45 | | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |