Make UEFI boot-platform build again
[haiku.git] / src / servers / app / MessageLooper.h
blob2b6bd7dcd82e1ca81c19ed6dbb1920f777981b6a
1 /*
2 * Copyright 2005-2016, Haiku.
3 * Distributed under the terms of the MIT License.
5 * Authors:
6 * Axel Dörfler, axeld@pinc-software.de
7 */
8 #ifndef MESSAGE_LOOPER_H
9 #define MESSAGE_LOOPER_H
12 #include <PortLink.h>
13 #include <Locker.h>
14 #include <OS.h>
17 class MessageLooper : public BLocker {
18 public:
19 MessageLooper(const char* name);
20 virtual ~MessageLooper();
22 virtual status_t Run();
23 virtual void Quit();
25 status_t PostMessage(int32 code,
26 bigtime_t timeout = B_INFINITE_TIMEOUT);
28 thread_id Thread() const { return fThread; }
29 bool IsQuitting() const { return fQuitting; }
30 sem_id DeathSemaphore() const
31 { return fDeathSemaphore; }
33 virtual port_id MessagePort() const = 0;
35 static status_t WaitForQuit(sem_id semaphore,
36 bigtime_t timeout = B_INFINITE_TIMEOUT);
38 private:
39 virtual void _PrepareQuit();
40 virtual void _GetLooperName(char* name, size_t length);
41 virtual void _DispatchMessage(int32 code,
42 BPrivate::LinkReceiver& link);
43 virtual void _MessageLooper();
45 protected:
46 static int32 _message_thread(void*_looper);
48 protected:
49 thread_id fThread;
50 BPrivate::PortLink fLink;
51 bool fQuitting;
52 sem_id fDeathSemaphore;
56 static const int32 kMsgQuitLooper = 'quit';
59 #endif /* MESSAGE_LOOPER_H */