我正在设计重拍俄罗斯方块,需要一个与输入功能同时运行的定时器功能。我正在使用pthread来实现这一目标,但是当我调用
时 pthread_create(&timer, NULL, Timer(), NULL);
我收到一条错误,声称尽管在我的标头中包含pthread_create()
,但对<pthread.h>
的呼叫没有匹配功能。
我注意到另一个人问了同样的问题here。但是,我设法在另一台计算机上成功创建了pthread,而没有对该人做过任何建议。
以下是我遇到问题的源代码。我不是要求你重写它,而是告诉我什么是错的。我会做研究来修复我的代码。
#include <pthread.h>
#include <iostream>
#include <time.h>
void *Timer(void) { //I have tried moving the asterisk to pretty much every
//possible position and with multiple asterisks. Nothing works
time_t time1, time2;
time1 = time(NULL);
while (time2 - time1 <= 1) {
time2 = time(NULL);
}
pthread_exit(NULL);
}
int main() {
pthread_t inputTimer;
pthread_create(&inputTimer, NULL, Timer(), NULL); //Error here
return 0;
}
谢谢
答案 0 :(得分:2)
您需要传递Timer
函数的地址,而不是它的返回值。因此
pthread_create(&inputTimer, NULL, &Timer, NULL); // These two are equivalent
pthread_create(&inputTimer, NULL, Timer, NULL);
pthread_create
期望它具有以下类型的第三个参数:void *(*)(void*)
;即一个函数采用void*
的单个参数并返回void*
。
答案 1 :(得分:2)
您需要传递pthread_create
您希望它调用的函数的地址,而不是您希望它调用的函数的返回值:
pthread_create(&inputTimer, NULL, Timer, NULL);
此外,您的函数必须具有以下签名void* (void*)
,因此必须将其更改为:
void *Timer(void*) {
time_t time1, time2;
time1 = time(NULL);
while (time2 - time1 <= 1) {
time2 = time(NULL);
}
pthread_exit(NULL);
}