neoGFX
Cross-platform C++ app/game engine
win32_message_queue.hpp
Go to the documentation of this file.
1 // win32_message_queue.hpp
2 /*
3  * Copyright (c) 2007 Leigh Johnston.
4  *
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are
9  * met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  *
14  * * Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in the
16  * documentation and/or other materials provided with the distribution.
17  *
18  * * Neither the name of Leigh Johnston nor the names of any
19  * other contributors to this software may be used to endorse or
20  * promote products derived from this software without specific prior
21  * written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
24  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
25  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
27  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 */
35 
36 #pragma once
37 
38 #include <neolib/neolib.hpp>
39 #include <deque>
40 #include <optional>
41 #include "async_task.hpp"
42 #include "message_queue.hpp"
43 
44 namespace neolib
45 {
47  {
48  public:
49  win32_message_queue(async_task& aIoTask, std::function<bool()> aIdleFunction, bool aCreateTimer = true);
51  public:
52  bool have_message() const override;
53  int get_message() const override;
54  void bump() override;
55  bool in_idle() const override;
56  void idle() override;
57  private:
58  static void CALLBACK timer_proc(HWND, UINT, UINT_PTR, DWORD);
59  private:
60  async_task& iIoTask;
61  std::function<bool()> iIdleFunction;
62  static std::map<UINT_PTR, win32_message_queue*> sTimerMap;
63  UINT_PTR iTimer;
64  bool iInIdle;
65  };
66 }
bool in_idle() const override
int get_message() const override
win32_message_queue(async_task &aIoTask, std::function< bool()> aIdleFunction, bool aCreateTimer=true)
bool have_message() const override