我试图找到一种方法来衡量代码执行时间,不用使用下面列出的约束。
在我的要求中,它是一个具有非常严格一致性的嵌入式系统。
我所能找到的只是使用C标头,未经批准的Google C ++编码标准标题或提升标题,这些标题不包括在项目一致性中。
我浏览了看似相似但无法找到所需内容的建议帖子。请帮忙!
约束不使用以下内容,
C系统标题,例如sys/time.h
Google C ++风格指南https://google.github.io/styleguide/cppguide.html
chrono
目标平台是Linux
此样式检查器列出了未经批准的时间表。 https://github.com/google/styleguide/blob/gh-pages/cpplint/cpplint.py
答案 0 :(得分:8)
如果我们谈论C ++ 11 - 唯一的方法是使用public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
try {
System.setProperty("http.keepAlive", "false");
// check for request method
if (method == "POST") {
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(group,""));
httpPost.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} else if (method == "GET") {
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
if (params.size() != 0) {
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
}
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
。谷歌风格指南在这里不是某种最终权威(有时它是非常值得怀疑的)。
std::chrono
被证明是好的和稳定的,甚至在AAA游戏的游戏引擎中使用,请亲自看看HERE。确切提供所需内容的好例子是HERE
如果您仍然不想要它,那么没有其他C ++ 11方法可以做到这一点,但您可能希望查看C风格的度量,如HERE。
仅供参考 - 所有方法都使用系统API,因此包含std::chrono
,无法避免。
答案 1 :(得分:3)
对于嵌入式系统,通常会在代码中更改GPIO状态,然后将示波器连接到引脚并查找生成的波形。这对运行时影响最小,因为更改GPIO是一种廉价的操作。它不需要任何库和附加代码。但它需要额外的硬件。
注意:嵌入式是非常容易理解的概念。 GPIO技巧与微控制器更相关。
答案 2 :(得分:2)
最终产品中是否需要时间测量?如果不是,我建议使用你喜欢的任何东西,并使用开关不将这些测量程序编译成最终产品。
答案 3 :(得分:-1)
你的意思是这样的吗? (对于Windows平台)
#include <Windows.h>
class stopwatch
{
double PCFreq = 0.0;
double CounterStart = 0; //google style compliant, less accurate
//__int64 CounterStart = 0; //for accuracy
LARGE_INTEGER li;
public:
void StartCounter()
{
if (!QueryPerformanceFrequency(&li))ExitProcess(0);
PCFreq = double(li.QuadPart) / 1000.0;
QueryPerformanceCounter(&li); CounterStart = li.QuadPart;
}
double GetCounter() { QueryPerformanceCounter(&li); return double(li.QuadPart - CounterStart) / PCFreq; }
};
用法:
stopwatch aclock;
aclock.StartCounter(); //start
//....///
cout<<aclock.GetcCounter()<<endl; //output time passed in milliseconds