VirtualBox

source: vbox/trunk/src/VBox/Main/include/VirtualBoxClientImpl.h@ 34808

最後變更 在這個檔案從34808是 34642,由 vboxsync 提交於 14 年 前

Main/VirtualBoxClient: Don't use the singleton factory, as the destruction of the objects is done too late (process termination). Use an instance counter approach, and make sure that only the first instance is actually working.

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 2.5 KB
 
1/* $Id: VirtualBoxClientImpl.h 34642 2010-12-02 18:16:04Z vboxsync $ */
2
3/** @file
4 * Header file for the VirtualBoxClient (IVirtualBoxClient) class, VBoxC.
5 */
6
7/*
8 * Copyright (C) 2010 Oracle Corporation
9 *
10 * This file is part of VirtualBox Open Source Edition (OSE), as
11 * available from http://www.alldomusa.eu.org. This file is free software;
12 * you can redistribute it and/or modify it under the terms of the GNU
13 * General Public License (GPL) as published by the Free Software
14 * Foundation, in version 2 as it comes in the "COPYING" file of the
15 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17 */
18
19#ifndef ____H_VIRTUALBOXCLIENTIMPL
20#define ____H_VIRTUALBOXCLIENTIMPL
21
22#include "VirtualBoxBase.h"
23#include "EventImpl.h"
24
25#ifdef RT_OS_WINDOWS
26# include "win/resource.h"
27#endif
28
29class ATL_NO_VTABLE VirtualBoxClient :
30 public VirtualBoxBase,
31 VBOX_SCRIPTABLE_IMPL(IVirtualBoxClient)
32#ifdef RT_OS_WINDOWS
33 , public CComCoClass<VirtualBoxClient, &CLSID_VirtualBoxClient>
34#endif
35{
36public:
37
38 VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(VirtualBoxClient, IVirtualBoxClient)
39
40 DECLARE_CLASSFACTORY()
41
42 DECLARE_REGISTRY_RESOURCEID(IDR_VIRTUALBOX)
43 DECLARE_NOT_AGGREGATABLE(VirtualBoxClient)
44
45 DECLARE_PROTECT_FINAL_CONSTRUCT()
46
47 BEGIN_COM_MAP(VirtualBoxClient)
48 COM_INTERFACE_ENTRY2(IDispatch, IVirtualBoxClient)
49 COM_INTERFACE_ENTRY(ISupportErrorInfo)
50 COM_INTERFACE_ENTRY(IVirtualBoxClient)
51 END_COM_MAP()
52
53 HRESULT FinalConstruct();
54 void FinalRelease();
55
56 // public initializer/uninitializer for internal purposes only
57 HRESULT init();
58 void uninit();
59
60 // IUSBDevice properties
61 STDMETHOD(COMGETTER(VirtualBox))(IVirtualBox **aVirtualBox);
62 STDMETHOD(COMGETTER(Session))(ISession **aSession);
63 STDMETHOD(COMGETTER(EventSource))(IEventSource **aEventSource);
64
65private:
66 /** Instance counter for simulating something similar to a singleton.
67 * Only the first instance will be a usable object, all additional
68 * instances will return a failure at creation time and will not work. */
69 static uint32_t g_cInstances;
70
71 static DECLCALLBACK(int) SVCWatcherThread(RTTHREAD ThreadSelf, void *pvUser);
72
73 struct Data
74 {
75 Data()
76 {}
77
78 const ComPtr<IVirtualBox> m_pVirtualBox;
79 const ComObjPtr<EventSource> m_pEventSource;
80
81 RTTHREAD m_ThreadWatcher;
82 RTSEMEVENT m_SemEvWatcher;
83 };
84
85 Data mData;
86};
87
88#endif // ____H_VIRTUALBOXCLIENTIMPL
89/* vi: set tabstop=4 shiftwidth=4 expandtab: */
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette