如何调用返回void指针的函数?

时间:2016-06-30 12:37:12

标签: c void-pointers

我有这段代码如下所示。

其中 nrthr 代表线程数并由用户输入。我一直想要我的主要节目"调用testFunc一次,所以如果用户输入nrthr为3,那么我想创建2个新线程。所以我的问题是......我怎么能在while循环之前调用testFunc?

int threadCount = 0;
...

// Call testFunc here

while(threadCount < nrthr - 1) {
        fprintf(stderr, "Created thread: %d\n", threadCount);
        if(pthread_create(&(tid[threadCount++]), NULL, testFunc, args) != 0)
            fprintf(stderr, "Can't create thread\n");
}

void *testFunc(void *arg)
{
    ...
}

2 个答案:

答案 0 :(得分:2)

您可以像这样致电testFunc

void *result = testFunc(args);

但是,如果testFunc调用任何与pthread相关的函数,请注意。由于在这种情况下函数没有在单独的线程中运行,因此调用像pthread_exit这样的函数将无法正常工作。

答案 1 :(得分:2)

如果testFunc应该在一个单独的线程上运行,那么可能就是它不会做某事并返回。

如果这个假设是正确的,你就不能在你的循环之前简单地调用它,否则你的主线程不会达到创建其他线程以同时运行 的程度。

如果该假设为假,那么您可以像任何其他函数testFunc(args)一样调用它,如果您不关心它,则忽略返回值。另一件需要注意的事项是pthread_exit从主线程调用时的行为 - 请参阅Is it OK to call pthread_exit from main?