pthread_create 没有参数?
pthread_create with no arguments?
我想创建一个没有函数参数的线程,但我一直收到严重困扰我的错误,因为我无法让一些超级简单的东西正常工作
这是我的代码:
#include<stdio.h>
#include<array>
#include<pthread.h>
#include<fstream>
#include<string>
void *showart(NULL);
int main(int argc, char** argv){
pthread_t thread1;
pthread_create( &thread1, NULL, showart, NULL);
getchar();
return 0;
}
void *showart(NULL)
{
std::string text;
std::ifstream ifs("ascii");
while(!ifs.eof())
{
std::getline(ifs,text);
printf(text.c_str());
}
}
它给出错误:
main.cpp:11:50: error: invalid conversion from ‘void*’ to ‘void* (*)(void*)’ [-fpermissive]
您的函数必须与 pthread 相匹配。这意味着它需要 return 和 void*
。请改用 void* showart(void*);
。
你的线程函数的声明和定义都不正确。您可以在 调用 时使用 NULL
,但是 declaration/definition 所需的该参数的 类型 是 void *
.
因此你需要这样的东西:
void *showart(void *); // declaration
void *showart(void *unused) { ... } // definition
换句话说,这样做就可以了:
#include<stdio.h>
#include<array>
#include<pthread.h>
#include<fstream>
#include<string>
void *showart (void *);
int main (int argc, char **argv) {
pthread_t thread1;
pthread_create (&thread1, NULL, showart, NULL);
getchar();
return 0;
}
void *showart (void *unused) {
std::string text;
std::ifstream ifs("ascii");
while(!ifs.eof()) {
std::getline (ifs, text);
printf ("%s\n", text.c_str());
}
}
尽管您可能应该考虑让您的代码更健壮一些,例如检查 pthread_create()
中的 return 代码,加入 main()
中的线程,检查以确保文件存在,等等。
我想创建一个没有函数参数的线程,但我一直收到严重困扰我的错误,因为我无法让一些超级简单的东西正常工作
这是我的代码:
#include<stdio.h>
#include<array>
#include<pthread.h>
#include<fstream>
#include<string>
void *showart(NULL);
int main(int argc, char** argv){
pthread_t thread1;
pthread_create( &thread1, NULL, showart, NULL);
getchar();
return 0;
}
void *showart(NULL)
{
std::string text;
std::ifstream ifs("ascii");
while(!ifs.eof())
{
std::getline(ifs,text);
printf(text.c_str());
}
}
它给出错误:
main.cpp:11:50: error: invalid conversion from ‘void*’ to ‘void* (*)(void*)’ [-fpermissive]
您的函数必须与 pthread 相匹配。这意味着它需要 return 和 void*
。请改用 void* showart(void*);
。
你的线程函数的声明和定义都不正确。您可以在 调用 时使用 NULL
,但是 declaration/definition 所需的该参数的 类型 是 void *
.
因此你需要这样的东西:
void *showart(void *); // declaration
void *showart(void *unused) { ... } // definition
换句话说,这样做就可以了:
#include<stdio.h>
#include<array>
#include<pthread.h>
#include<fstream>
#include<string>
void *showart (void *);
int main (int argc, char **argv) {
pthread_t thread1;
pthread_create (&thread1, NULL, showart, NULL);
getchar();
return 0;
}
void *showart (void *unused) {
std::string text;
std::ifstream ifs("ascii");
while(!ifs.eof()) {
std::getline (ifs, text);
printf ("%s\n", text.c_str());
}
}
尽管您可能应该考虑让您的代码更健壮一些,例如检查 pthread_create()
中的 return 代码,加入 main()
中的线程,检查以确保文件存在,等等。