clock_t endTime;//当前时间 endTime = clock();在qt中怎么使用
时间: 2024-02-21 19:59:43 浏览: 113
在 Qt 中,可以使用 `QTime` 类来获取程序执行时间。具体的实现方式如下:
```cpp
#include <QTime>
// ...
QTime startTime = QTime::currentTime(); // 获取程序开始执行的时间
// 执行一些操作
QTime endTime = QTime::currentTime(); // 获取程序结束执行的时间
int elapsedMilliseconds = startTime.msecsTo(endTime); // 计算程序执行时间(单位:毫秒)
qDebug() << "程序执行时间:" << elapsedMilliseconds << "毫秒";
```
在上面的代码中,`QTime::currentTime()` 函数用于获取当前时间,`msecsTo()` 函数用于计算两个时间之间的时间差(单位:毫秒)。
相关问题
下面这段代码什么意思? clock_t startTime, endTime; startTime = clock(); double time = 0.0; while (1) { endTime = clock(); time = (double)(endTime - startTime) / 1000; if (time > 60) { break; } }
这段代码用于计算程序的运行时间,具体的逻辑如下:
1. 声明了两个`clock_t`类型的变量`startTime`和`endTime`,用于保存时钟时间。
2. 使用`clock()`函数获取当前的时钟时间,并将其赋值给`startTime`,表示程序开始运行的时间。
3. 声明一个`double`类型的变量`time`,用于保存程序的运行时间(以秒为单位)。
4. 进入一个无限循环,表示程序会一直执行下去。
5. 在循环中,通过`clock()`函数获取当前的时钟时间,并将其赋值给`endTime`。
6. 计算程序的运行时间,通过将`endTime`减去`startTime`得到时钟周期数,然后除以1000得到秒数,并将结果赋给`time`。
7. 检查程序的运行时间是否超过60秒(即一分钟),如果超过则跳出循环。
8. 循环会一直执行直到程序运行时间超过60秒为止。
这段代码可以用于实现程序在一定时间内的运行控制,当程序运行超过指定的时间(这里是60秒)时,可以通过跳出循环来结束程序的执行。
需要注意的是,`clock()`函数返回的是处理器时钟时间,而不是实际经过的时间。因此,它适用于测量程序运行期间的处理器时间,但不适用于测量实际的墙钟时间。如果需要测量实际的墙钟时间,可以考虑使用其他方法,如`std::chrono`库提供的高精度计时器。
class SR_net { public: SR_net(string path, vector<int> input_size, bool fp32, bool cuda = true); private: vector<int64_t> Gdims; int Gfp32; Env env = Env(ORT_LOGGING_LEVEL_ERROR, "RRDB"); SessionOptions session_options = SessionOptions(); Session* Gsession = nullptr; vector<const char*> Ginput_names; vector<const char*> Goutput_names; vector<int> Ginput_size = {}; }; SR_net::SR_net(string path, vector<int> input_size, bool fp32, bool cuda) { this->Ginput_size = input_size; this->Gfp32 = fp32; clock_t startTime_, endTime_; startTime_ = clock(); session_options.SetIntraOpNumThreads(6); if (cuda) { OrtCUDAProviderOptions cuda_option; cuda_option.device_id = 0; cuda_option.arena_extend_strategy = 0; cuda_option.cudnn_conv_algo_search = OrtCudnnConvAlgoSearchExhaustive; cuda_option.gpu_mem_limit = SIZE_MAX; cuda_option.do_copy_in_default_stream = 1; session_options.AppendExecutionProvider_CUDA(cuda_option); } wstring widestr = wstring(path.begin(), path.end()); this->Gsession = new Session(env, widestr.c_str(), this->session_options); this->session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_ALL); AllocatorWithDefaultOptions allocator; this->Ginput_names = { "input" }; this->Goutput_names = { "output" }; endTime_ = clock(); cout << " The model loading time is:" << (double)(endTime_ - startTime_) / CLOCKS_PER_SEC << "s" << endl; } int main() { vector<int> input_shape = {}; SR_net net("E:/prj/SR_C/onnx_file/rrdb_full.onnx", input_shape, true, true); },在这段代码中,我如何把SR_net net("E:/prj/SR_C/onnx_file/rrdb_full.onnx", input_shape, true, true);这一行写到主函数的外面?
你可以将SR_net的构造函数定义为一个静态函数,然后在主函数外部进行调用。具体代码如下:
```c++
class SR_net {
public:
SR_net(string path, vector<int> input_size, bool fp32, bool cuda = true);
static SR_net* createSRNet();
private:
vector<int64_t> Gdims;
int Gfp32;
Env env = Env(ORT_LOGGING_LEVEL_ERROR, "RRDB");
SessionOptions session_options = SessionOptions();
Session* Gsession = nullptr;
vector<const char*> Ginput_names;
vector<const char*> Goutput_names;
vector<int> Ginput_size = {};
};
SR_net::SR_net(string path, vector<int> input_size, bool fp32, bool cuda) {
// 构造函数的代码不变
}
SR_net* SR_net::createSRNet() {
vector<int> input_shape = {};
SR_net* net = new SR_net("E:/prj/SR_C/onnx_file/rrdb_full.onnx", input_shape, true, true);
return net;
}
int main() {
SR_net* net = SR_net::createSRNet();
// 其他代码
delete net;
return 0;
}
```
在主函数中,我们通过SR_net::createSRNet()函数创建SR_net对象,这个函数会返回一个指向SR_net对象的指针。当我们使用完SR_net对象后,需要调用delete操作符释放内存。
阅读全文