1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * MS COM / XPCOM Abstraction Layer:
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * Event and EventQueue class declaration
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * Copyright (C) 2006-2013 Oracle Corporation
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * available from http://www.virtualbox.org. This file is free software;
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * you can redistribute it and/or modify it under the terms of the GNU
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * General Public License (GPL) as published by the Free Software
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * The contents of this file may alternatively be used under the terms
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * of the Common Development and Distribution License Version 1.0
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * VirtualBox OSE distribution, in which case the provisions of the
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * CDDL are applicable instead of those of the GPL.
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * You may elect to license modified versions of this file under the
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * terms and conditions of either the GPL or the CDDL or both.
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync#else // VBOX_WITH_XPCOM
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync#endif // VBOX_WITH_XPCOM
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * Base class for all events. Intended to be subclassed to introduce new
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * events and handlers for them.
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * Subclasses usually reimplement virtual #handler() (that does nothing by
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * default) and add new data members describing the event.
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * Event handler. Called in the context of the event queue's thread.
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * Always reimplemented by subclasses
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * @return reserved, should be NULL.
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * Simple event queue.
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * When using XPCOM, this will map onto the default XPCOM queue for the thread.
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * So, if a queue is created on the main thread, it automatically processes
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * XPCOM/IPC events while waiting.
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * When using Windows, Darwin and OS/2, this will map onto the native thread
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * queue/runloop. So, windows messages and what not will be processed while
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * waiting for events.
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * @note It is intentional that there is no way to retrieve arbitrary
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * events and controlling their processing. There is no use case which
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * warrants introducing the complexity of platform independent events.
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync static int init();
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync static int uninit();
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync static int dispatchMessageOnWindows(MSG const *pMsg, int rc);
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync /** The thread which the queue belongs to. */
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync /** Duplicated thread handle for MsgWaitForMultipleObjects. */
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync#else // VBOX_WITH_XPCOM
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync /** Whether it was created (and thus needs destroying) or if a queue already
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync * associated with the thread was used. */
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync /** Whether event processing should be interrupted. */
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync static void *PR_CALLBACK plEventHandler(PLEvent *self);
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync static void PR_CALLBACK plEventDestructor(PLEvent *self);
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync#endif // VBOX_WITH_XPCOM
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync} /* namespace com */