0

我正在编写一个多线程应用程序,并且处理新线程的函数声明如下:

void * Client::sendMessage(void *threadid) {
// some code without any return
}

我用这个来调用这个函数:

// create new thread for outcomming messages
    pthread_t thread;
    pthread_create(&thread, NULL,
            c->sendMessage, (void *) fd);

它工作得很好,但是当我在这个命令中使用这些标志编译它时: g++ main.cpp -Wall -pedantic -Wno-long-long -O0 -ggdb -lncurses -pthread -o ChatApp 它让我收到这样的消息:

Client.cpp: In static member function ‘static void* Client::sendMessage(void*)’:
Client.cpp:167:1: warning: no return statement in function returning non-void [-Wreturn-type]

所以我的问题是,在编译期间我应该返回什么来消除这些警告?

4

3 回答 3

2

您将sendMessage函数的地址作为第三个参数传递给pthread_create.

调用pthread_create会创建一个新线程,该线程会在启动例程(在本例中为您的sendMessage函数)返回(或在其他几种情况下)返回时终止。从 start 例程返回一个值相当于将相同的值传递给pthread_exit(). 如果同一void*进程中的另一个线程调用pthread_join.

它是一个void*值,因为它void*是一个通用指针,可以指向任何类型的对象。如果您想使用此机制将信息从终止线程传递到另一个线程,则需要确定一种机制来执行此操作。如果您不需要传递此类信息,那么您的启动例程返回什么并不重要;最简单的做法是return nullptr;

于 2013-06-04T00:42:54.760 回答
1

Avoid *与 void 函数不同。Avoid *是一个指针,但它可以更安全地指向任何东西,在 c++ 中你不需要使用void *太多,但它应该返回的是一个指针。在这种情况下,您可能只需要 return threadid。顺便说一句,在您的情况下,函数默认返回 0(所以 NULL),这也可能没问题,很难从提供的代码量中知道

于 2013-06-04T00:20:41.757 回答
1

返回与您的函数合同一致的任何内容。如果返回确实总是被忽略,请考虑将返回类型更改为 void。

于 2013-06-04T00:23:17.847 回答