上代码:
#pragma once
#include <string>
#include <sstream>
#include <map>
#include <functional>
#include <inttypes.h>
using namespace std;
using UsageHandle = std::function<void (void)>;
static std::map<string, string> params;
namespace robin
{
int inline parseArgs(int argc, char ** argv, UsageHandle usage)
{
params.clear();
for (int i = 1; i < argc; )
{
string key = argv[i];
i++;
if (i >= argc)
{
if (usage)
usage();
break;
}
string val = argv[i];
i++;
params.insert(std::make_pair(key, val));
}
return params.size();
}
int inline getIntArg(const char * name, int& val, int init_val = 1, int lower = INT_MIN, int upper = INT_MAX)
{
string tmp = params[name];
if (!tmp.empty())
{
val = std::atoi(tmp.c_str());
if (val < lower)
val = lower;
if (val > upper)
val = upper;
return 1;
}
else
{
val = init_val;
return 0;
}
}
int inline getInt64Arg(const char * name, int64_t& val, int64_t init_val = 1, int64_t lower = LLONG_MIN, int64_t upper = LLONG_MAX)
{
string tmp = params[name];
if (!tmp.empty())
{
val = std::atoll(tmp.c_str());
if (val < lower)
val = lower;
if (val > upper)
val = upper;
return 1;
}
else
{
val = init_val;
return 0;
}
}
int inline getStringArg(const char * name, string & val, const char * init_val)
{
val = params[name];
if (val.empty())
{
val = init_val;
return 0;
}
return 1;
}
}// endof namespace robin
使用方式:
void usage()
{
printf("usage: testxxxx.exe [-n PacketsPerThread] [-s Speed] [-t nThreads]\n");
}
int main(int argc, char ** argv)
{
int nThreads;
int nSpeed;
int64_t nPackets;
int ret = parseArgs(argc, argv, usage);
ret = getIntArg("-t", nThreads, 2, 1, 20);
ret = getIntArg("-s", nSpeed, 1000, 1, 100000);
ret = getInt64Arg("-n", nPackets, 10000, 1000, 10000 * 10000 * 100);
testLog(nThreads, nSpeed, nPackets);
return 0;
}
命令行为
.\testFnlog.exe -s 2 -n 100000 -t 3
或者在vs2017 属性,调试,命令行参数中输入 -s 2 -n 100000 -t 3