我一直在阅读关于这个主题的文章。我已经阅读了很多可能的解决方案,所以请不要将我的问题标记为重复,只需要解决该问题即可。
我有一个函数,可以计算某些代码的执行时间。这段代码将作为参数发送(将是一个函数)。
这是计算时间的函数:
double executionTime( /* HERE I WANNA PASS THE FUNCTION TO CALCULATE EXECTIME*/ )
{
LARGE_INTEGER frequency;
LARGE_INTEGER start;
LARGE_INTEGER end;
double interval;
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&start);
// HERE GOES CODE TO PROCCESS
QueryPerformanceCounter(&end);
interval = (double) (end.QuadPart - start.QuadPart) / frequency.QuadPart;
return (interval);
}
我已经尝试过这种方法(以及其他方法,但这是最可见的):
double executionTime( void (*f)() )
{
LARGE_INTEGER frequency;
LARGE_INTEGER start;
LARGE_INTEGER end;
double interval;
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&start);
// Function to proccess
f();
QueryPerformanceCounter(&end);
interval = (double) (end.QuadPart - start.QuadPart) / frequency.QuadPart;
return (interval);
}
我不知道处理函数的参数是否重要。在某些网站上说是,在其他网站上说不。我要处理的函数的声明是:
int readFileAndInsertRegs(char *nombreFichero, PERSONA *tablaHash[], int tam, int tipoInsertado, int tipoPruebaColision)
我已经像这样调用函数executionTime
:
executionTime( readFileAndInsertRegs("./files/listaActores.csv", &tablaHash, TAM_E1, NORMAL, LINEAL) );
有人可以帮助我解决这个特定问题吗?
谢谢。
答案 0 :(得分:2)
通常的方法是将函数参数传递给executionTime
并使用它们调用函数,即
double executionTime( void (*f)(), char *arg1, PERSONE arg2[], ... )
{
// do preamble
f(arg1, arg2, .....);
// finish
}
...
executionTime( &readFileAndInsertRegs, "./files/listaActores.csv", &tablaHash, TAM_E1, NORMAL, LINEAL));
这是一个有效的示例:
#include <stdio.h>
void process1(void (*f)(), int farg) {
f(farg);
}
void f1(int arg) {
printf("f1: %d\n", arg);
}
int main() {
process1(&f1, 10);
return 0;
}
,并且在'c'中,您可以声明函数的所有参数,尽管可以,但这样做是个好主意。编译器可以再进行一次检查
void process1(void (*f)(int), int farg) {