快速业务通道

在C++程序中添加逻辑流程控制

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
{
FLOW_WAIT(read_err=);

}
START_FLOW {
FLOW_WAIT(current_tick & last_receive_tick >= RECEIVE_TIMEOUT);

}

示例对比

下面还有一个例子演示了流程的可伸缩性及威力,比如说要解析以下格式的URL:

[scheme://[user:pass@]host[:port]]/]uri[?param[#ankor]]

如果只想遍历URL字符串一次,可能会编写如下代码:

void URL::ParseString(const string &url)
{
string s;
s.reserve(url.length());
if (Original.empty())
Original = url;
OriginalLength = url.length();
const char *p = url.c_str();
//解析scheme [http:]
while (*p && (*p != ''/'') && (*p != '':'') &&
(*p != '';'') && (*p != ''?'') &&
(*p != ''#'')) s += *p++;
if (*p == '':'')
{
Scheme = s;
p++;
s.resize(0);
while (*p && (*p != ''/'') && (*p != '';'') &&
(*p != ''?'') && (*p != ''#'')) s += *p++;
}
// 解析 //[user[:pass]@]host[:port]/
// 解析端口)
if (*p && (*p == ''/'') && (*(p+1) == ''/''))
{
p+=2;
s.resize(0);
while (*p && (*p != ''/'') && (*p != '':'') &&
(*p != ''@'')) s += *p++;
Host = s;
if (*p == '':'')
{
s.resize(0);
while (*p && (*p != ''/'') && (*p != ''@'')) s += *p++;
if (*p != ''@'') Port = IP_PORT(atol(&s[0]));
}
if (*p == ''@'')
{
p++;
if (Host.length() == 0)
{
User = s;
}
else
{
User = Host;
Password = s;
Host.resize(0);
}
s.resize(0);
while (*p && (*p != ''/'') && (*p != '':'')) s += *p++;
Host = s;
if (*p == '':'')
{
p++;
s.resize(0);
while (*p && *p != ''/'') s += *p++;
Port = IP_PORT(atol(&s[0]));
}
}
//重建NetLoc字符串
if (User.length())
{
NetLoc = User;
if (Password.length())
{
NetLoc += ":";
NetLoc += Password;
}
NetLoc += ''@'';
}
NetLoc += Host;
if (Port != 80)
{
char portstring[15];
NetLoc += '':'';
sprintf(portstring, "%d", Port);
NetLoc += portstring;
}
s.resize(0);
}
//解析路径[/a[/b[..]]/]与文件
//如果遇到''/''且s不为空,这是一个相对路径。
if (s.length() && (*p == ''/''))
{
p++;
RelativePath = true;
Path.push_back(s);
s.resize(0);
while (*p && (*p != ''/'') && (*p != '';'') &&
(*p != ''?'') && (*p != ''#'') && (*p != ''&'')) s += *p++;
}
else
{
//这是一个不带反斜线的纯文件名,或者它只是一个主机名。
if (*p != ''/'') RelativePath = Host.empty();
else {
p++;
while (*p && (*p != ''/'') && (*p != '';'') &&
(*p != ''?'') && (*p != ''#'') && (*p != ''&'')) s += *p++;
}
}
//只要当前字后跟有反斜线,就把它追加到路径后。
while (*p == ''/'')
{
p++;
//if (s.length())
Path.push_back(s); // uri可为''...//...''
s.resize(0);
while (*p && (*p != ''/'') && (*p != '';'') &&
(*p != ''?'') && (*p != ''#'') && (*p != ''&'')) s += *p++;
}
//现在当前字为文件名
File = s;
//
//获取文件类型
//
string::size_type pp = File.rfind(''.'');
if (pp != string::npos) {
FileType = File.substr(pp+1);
}
//寻找参数
if (*p == '';'')
{
p++;
s.resize(0);
while (*p && (*p != ''?'')

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号