时间守卫

/********************************************************************
*  文件名:   CLK_LIB.h
*  文件描述: Switch_Case对象
*  创建人:   陈泽丹 ,2012年8月27日     
*  版本号:   1.0
*  修改记录:
********************************************************************/


#include <iostream>
#include <tchar.h>
#include <windows.h>
#include <map>
#include <algorithm>


using namespace std;



#ifdef _DEBUG	
	#define  TIME_GUARD( _x ) Time_Guard( _x )
#else
	#define  TIME_GUARD( _x ) NULL
#endif // _DEBUG




//时间守卫 - 用于测试经历时间
class Time_Guard
{
public:
	Time_Guard(const char* _p_caption)
	{
		size_t len = strlen(_p_caption);
		if( len < MAX_PATH ) 
		{
			sprintf(m_caption,"%s", _p_caption);
		}
		else
		{
			sprintf(m_caption, "%s", "Error: caption is over stack! ");
			cout<<"Error: "<<_p_caption<<"is over stack!"<<endl;
		}
		m_time = GetTickCount();
	}
	~Time_Guard()
	{
		ULONG tm = GetTickCount() - m_time;
		cout<<m_caption<<": "<<tm<<" (ms)"<<endl;
	}

private:
	char m_caption[256];
	ULONG m_time;
};



//Switch_Case对象
template< template< int v > class _PAR_TYPE, int _start, int _end>  
class CLK_Switch
{
public:
	template <class _PtrObj>
	static bool switch_case(const _PtrObj& _p, const int _msg_type_ID, void* buf)
	{
		if( _msg_type_ID < _start || _msg_type_ID > _end || _start > _end) 
			return false;  
		const int POS = (_start + _end)/2;  
		if( POS == _msg_type_ID)
		{
			_PAR_TYPE< POS >* p_msg = ( _PAR_TYPE< POS >* ) buf;
			_p->dispatch( p_msg );
			return true;
		}
		else if( _msg_type_ID  < POS  ) 
		{
			return CLK_Switch<_PAR_TYPE, _start, POS>::switch_case(_p, _msg_type_ID, buf);
		}
		else
		{
			return CLK_Switch<_PAR_TYPE, POS+1, _end>::switch_case(_p, _msg_type_ID, buf);
		}
	}
};
template< class _Local_Type>  
class CLK_Base_Case
{
public:
	CLK_Base_Case(_Local_Type* _p_local):m_p_local(_p_local){}
	virtual ~CLK_Base_Case(){ m_p_local = NULL; }
	virtual void operator()(const int _msg_type_ID, void* buf) = 0;
protected:
	_Local_Type* m_p_local;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue Router 提供了一套强大的导航守卫(Guard)系统,这些守卫可以在路由变化之前或之后执行自定义操作,允许开发者拦截、验证、修改或重定向路由过程。路由守卫主要分为以下几种类型: 1. **全局守卫** (Global Guards): - **beforeEach**: 在每次导航尝试之前被调用,可以阻止导航、改变目标URL或者提供一些默认参数。 - ** afterEach**: 在每次导航完成后被调用,无论是否发生导航失败。 2. **路由级守卫** (Route Guards): - **beforeEnter**: 只在进入特定路由时触发,用于验证或处理进入该路由的权限或状态。 - **enter**: 类似于beforeEnter,但它是异步的,因此可以用它来做一些需要时间的操作,如数据请求。 - **afterEnter**: 在进入路由并完成渲染后执行。 - **beforeLeave**: 当离开当前路由时触发,可以用来确认离开操作。 - **leave**: 异步的离开守卫,类似`afterEnter`。 3. **导航失败守卫** (Navigation Failure Guards): - **catch**: 当导航失败(例如,未找到匹配的路由)时触发。 你可以使用这些守卫来实现各种功能,比如身份验证、数据加载、错误处理等。为了更好地利用它们,你需要在Vue实例的`router.options`中配置守卫,或者在每个具体的路由对象上设置。例如: ```javascript // 全局守卫示例 router.beforeEach((to, from, next) => { // 检查用户是否已登录 if (!isAuthenticated()) { next('/login'); } else { next(); } }); // 路由级守卫示例 const router = new VueRouter({ routes: [ { path: '/private', component: PrivateComponent, beforeEnter: authenticateUser } ] }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值