00001 00004 class NOVTABLE app_close_blocker : public service_base 00005 { 00006 public: 00008 virtual bool query() = 0; 00009 00011 static bool g_query(); 00012 00013 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(app_close_blocker); 00014 }; 00015 00019 class NOVTABLE app_close_blocking_task { 00020 public: 00021 virtual void query_task_name(pfc::string_base & out) = 0; 00022 00023 protected: 00024 app_close_blocking_task() {} 00025 ~app_close_blocking_task() {} 00026 00027 PFC_CLASS_NOT_COPYABLE_EX(app_close_blocking_task); 00028 }; 00029 00033 class NOVTABLE app_close_blocking_task_manager : public service_base { 00034 public: 00035 virtual void register_task(app_close_blocking_task * task) = 0; 00036 virtual void unregister_task(app_close_blocking_task * task) = 0; 00037 00038 00039 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(app_close_blocking_task_manager); 00040 }; 00041 00044 class app_close_blocking_task_impl : public app_close_blocking_task { 00045 public: 00046 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*/}} 00047 ~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*/}} 00048 00049 void query_task_name(pfc::string_base & out) { out = "<unnamed task>"; } 00050 };
1.5.5