您的位置:首页 > 产品设计 > UI/UE

用户界面UI -- 客户端 -- 数据库 交互时时间保护

2016-09-23 18:26 369 查看
         界面UI和客户端交互用的是windows消息机制,PostMessage();是异步的,操作之后就会返回结果,客户端与数据库链接是长连接,异步的,根据报文多少设置心跳包时间长短。为了让一个操作能连贯,在中间加一个时间保护机制。当UI传消息给客户端时,交互结束,增加一个时间保护,等到数据库传输结束。

        注意要针对异常操作加时间保护释放。

代码片段

void CDB::StartProtect(bool bEnableMsgPump, unsigned int nTimeLimit)
{
if (s_bEnableMsgPump || s_nTimeLimit)
throw soci::soci_error("server is busy", soci::soci_error::DBE_CMD_BUSY);

ResetProtect(bEnableMsgPump, nTimeLimit);
}

void CDB::ResetProtect(bool bEnableMsgPump, unsigned int nTimeLimit)
{
s_bEnableMsgPump = bEnableMsgPump;
s_nTimeLimit = nTimeLimit;

if (s_nTimeLimit)
m_Session.timelimit(s_nTimeLimit);

if (s_bEnableMsgPump)
m_Session.msg_pump(true);
}

//
void CDB::EndProtect()
{
if (s_nTimeLimit)
m_Session.timelimit(0);

if (s_bEnableMsgPump)
m_Session.msg_pump(false);

s_bEnableMsgPump = false;
s_nTimeLimit = 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: