这一定是一个问题很多,但我找不到我想要的东西。
想象一下:
你继续输入一个数字并继续得到这个错误,而在后台它只是跟踪程序运行了多长时间,通过每秒做一次n ++,无论文本/输入部分发生了什么。最终你可以输入类似“时间”的东西,然后它会显示你在那里待了多久,只需几秒钟......
所以我的问题是:你到底该怎么做呢?让它们独立运行?
提前致谢!
编辑:我并不是特别想要做这个时间的事情,这只是我能想出的最简单的例子来询问有关独立运行的功能。
答案 0 :(得分:9)
您无需运行并行任务即可测量已用时间。 C ++ 11中的一个例子:
#include <chrono>
#include <string>
#include <iostream>
int main()
{
auto t1 = std::chrono::system_clock::now();
std::string s;
std::cin >> s;
// Or whatever you want to do...
auto t2 = std::chrono::system_clock::now();
auto elapsedMS =
(std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1)).count()
std::cout << elapsedMS;
}
修改强>
由于您似乎对并行启动多个任务的方式感兴趣,因此这里有一个提示(同样,使用C ++ 11):
#include <ctime>
#include <future>
#include <thread>
#include <iostream>
int long_computation(int x, int y)
{
std::this_thread::sleep_for(std::chrono::seconds(5));
return (x + y);
}
int main()
{
auto f = std::async(std::launch::async, long_computation, 42, 1729);
// Do things in the meanwhile...
std::string s;
std::cin >> s;
// And we could continue...
std::cout << f.get(); // Here we join with the asynchronous operation
}
上面的例子开始一个长时间的计算,至少需要5秒,而同时会做其他事情。然后,最终,它在未来对象上调用get()
以与异步计算连接并检索其结果(如果尚未完成则等待它完成)。
答案 1 :(得分:2)
如果你真的想使用线程,不只是计算时间,你可以使用boost。
示例:强>
include <boost/thread.hpp>
void task1() {
// do something
}
void task2() {
// do something
}
void main () {
using namespace boost;
thread thread1 = thread(task1);
thread thread2 = thread(task2);
thread2.join();
thread1.join();
}
答案 2 :(得分:1)
我并不是特别想要做这个计时的事情,这只是我能提出的最简单的例子来询问有关独立运行的功能。
然后你可能想要研究多线程。在C ++ 11中,您可以这样做:
#include <thread>
#include <iostream>
void func1() {
std::cout << "func1" << std::endl;
}
void func2() {
std::cout << "func2" << std::endl;
}
int main() {
std::thread td1(func1);
std::thread td2(func2);
std::cout << "Started 2 threads. Waiting for them to finish..." << std::endl;
td1.join();
td2.join();
std::cout << "Threads finished." << std::endl;
return 0;
}
如果您不使用C ++ 11,您仍然可以选择。你可以看看:
答案 3 :(得分:0)
首先,您不需要增加自己的时间变量。只记录程序启动的时间,time
命令将返回现在时间和开始时间之间的差异。
更一般 -