00001 00002 00003 class NOVTABLE app_close_blocker : public service_base 00004 { 00005 public: 00007 virtual bool query() = 0; 00008 00010 static bool g_query(); 00011 00012 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(app_close_blocker); 00013 }; 00014 00018 class NOVTABLE app_close_blocking_task { 00019 public: 00020 virtual void query_task_name(pfc::string_base & out) = 0; 00021 00022 protected: 00023 app_close_blocking_task() {} 00024 ~app_close_blocking_task() {} 00025 00026 PFC_CLASS_NOT_COPYABLE_EX(app_close_blocking_task); 00027 }; 00028 00032 class NOVTABLE app_close_blocking_task_manager : public service_base { 00033 public: 00034 virtual void register_task(app_close_blocking_task * task) = 0; 00035 virtual void unregister_task(app_close_blocking_task * task) = 0; 00036 00037 00038 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(app_close_blocking_task_manager); 00039 }; 00040 00043 class app_close_blocking_task_impl : public app_close_blocking_task { 00044 public: 00045 app_close_blocking_task_impl() { try { static_api_ptr_t<app_close_blocking_task_manager>()->register_task(this); } catch(exception_service_not_found) {/*user runs pre-0.9.5.1*/}} 00046 ~app_close_blocking_task_impl() { try { static_api_ptr_t<app_close_blocking_task_manager>()->unregister_task(this); } catch(exception_service_not_found) {/*user runs pre-0.9.5.1*/}} 00047 00048 void query_task_name(pfc::string_base & out) { out = "<unnamed task>"; } 00049 };
1.5.5