我不知道为什么这不起作用
#include <iostream>
#include <pthread.h>
using namespace std;
void *print_message(){
cout << "Threading\n";
}
int main() {
pthread_t t1;
pthread_create(&t1, NULL, &print_message, NULL);
cout << "Hello";
return 0;
}
错误:
[描述,资源,路径,位置,类型]初始化参数3 'int pthread_create(pthread_t *,const pthread_attr_t *,void *) (*)(void *),void *)'threading.cpp threading / src第24行C / C ++ 问题
答案 0 :(得分:36)
您应该将主题声明声明为:
void* print_message(void*) // takes one parameter, unnamed if you aren't using it
答案 1 :(得分:18)
因为主线程退出。
在主线程中休眠。
cout << "Hello";
sleep(1);
return 0;
POSIX标准没有规定主线程退出时会发生什么 但在大多数实现中,这将导致所有生成的线程死亡。
因此在主线程中,您应该在退出之前等待线程死亡。在这种情况下,最简单的解决方案就是睡眠并为其他线程提供执行机会。在实际代码中,您将使用pthread_join();
#include <iostream>
#include <pthread.h>
using namespace std;
#if defined(__cplusplus)
extern "C"
#endif
void *print_message(void*)
{
cout << "Threading\n";
}
int main()
{
pthread_t t1;
pthread_create(&t1, NULL, &print_message, NULL);
cout << "Hello";
void* result;
pthread_join(t1,&result);
return 0;
}
答案 2 :(得分:2)
来自pthread函数原型:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void*), void *arg);
传递给pthread_create的函数必须有
的原型void* name(void *arg)
答案 3 :(得分:2)
这对我有用:
#include <iostream>
#include <pthread.h>
using namespace std;
void* print_message(void*) {
cout << "Threading\n";
}
int main() {
pthread_t t1;
pthread_create(&t1, NULL, &print_message, NULL);
cout << "Hello";
// Optional.
void* result;
pthread_join(t1,&result);
// :~
return 0;
}
答案 4 :(得分:0)
使用G ++编译时,记得放入-lpthread标志:)
答案 5 :(得分:0)
联动。试试这个:
extern "C" void *print_message() {...