c++ pthread_create没有参数?

i5desfxk  于 2023-04-08  发布在  其他
关注(0)|答案(2)|浏览(156)

我想创建一个没有函数参数的线程,但我一直得到严重困扰我的错误,因为我不能得到一些超级简单的工作权利
我的代码:

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

jtoj6r0c1#

你的函数必须与pthread函数匹配;它需要获取并返回void*
使用void* showart(void*);代替。

xmjla07d

xmjla07d2#

你的线程函数的声明和定义都不正确。你可以在 * 调用 * 它时使用NULL,但是声明/定义所需的那个参数的 typevoid *
因此,您需要类似于:

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()内的线程,检查以确保文件存在,等等。

相关问题