没有参数的pthread_create?

时间:2015-10-18 01:15:35

标签: c++ c++11 pthreads posix

我想创建一个没有函数参数的线程,但是我一直在收到严重错误的错误,因为我无法获得超级简单的工作

继承我的代码:

#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]

2 个答案:

答案 0 :(得分:5)

你的功能必须匹配pthread。这意味着需要采取并返回void*。请改用void* showart(void*);

答案 1 :(得分:0)

线程函数的声明和定义都不正确。您可以在调用时使用NULL,但声明/定义所需的该参数的类型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()的返回代码,加入main()中的线程,检查以确保文件存在,等等