【问题标题】:How to pass multiple parameters to a thread function如何将多个参数传递给线程函数
【发布时间】:2010-09-09 05:49:59
【问题描述】:

我已经为一个线程创建了一个函数,但是我想给函数传递多个参数。

这是我的源代码:

#include "work.h"
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>    // compile with -lpthread

int count = 20;

void* ChildProc(void* arg)
{
    int i;

    for(i = 1; i <= count; i++)
    {   
        printf("%s:%d from thread <%x>\n", arg, i, pthread_self());
        DoWork(i);
    }

    return NULL;
}

void ParentProc(void)
{
    int i;

    for(i = count / 2; i > 0; i--)
    {
        printf("Parent:%d from thread <%x>\n", i, pthread_self());
        DoWork(i);
    }
}

int main(void)
{
    pthread_t child;

    pthread_create(&child, NULL, ChildProc, "Child");

    ParentProc();

    pthread_join(child, NULL); // make child a non-daemon(foreground) thread
}

现在如何将多个参数传递给 ChildProc() 方法?

一种方法是传递数组或结构。但是如果我想在没有数组或结构的情况下传递多个变量怎么办?

【问题讨论】:

  • 还有其他类似pthread_create()的方法可以支持多参数吗?

标签: c unix ubuntu posix


【解决方案1】:

一个快速而垃圾的答案是创建一个结构来保存所有参数并传递它的指针

【讨论】:

  • 如何在 C 中创建参数类对象?
  • 忘记类对象。在C中:创建一个结构来保存参数,从中实例化一个变量,设置参数,传递这个变量的指针
  • 快速答案没有什么垃圾 - 这是正确的答案。
【解决方案2】:

一种方法是传递数组或结构。

这就是的方式。 指针指向一个结构,即。

如果我想在没有数组或结构的情况下传递多个变量怎么办?

那你就不走运了。您需要的是数组或指向结构的指针。

【讨论】:

  • 还有其他类似pthread_create()的方法可以支持多参数吗?
  • @Searock: 没有 - 没有任何其他类似于 pthread_create() 的方法支持多个参数。
【解决方案3】:

您可以传递void * 缓冲区流,如果您知道长度,则可以访问它们。它类似于GArrays的实现。

你如何创建它们?

void *buffer = malloc(sizeofelements);
memcpy(buffer,element1,sizeof element1);
memcpy(buffer+sizeof element1,element2, sizeof element2);

注意:以上不是可编译的 C 代码。你需要努力。

您可以使用上述类型的东西。

您可以稍后访问变量,因为您已经知道大小

【讨论】:

  • 我的意思是如果你 CTRL-C CTRL-V 它不会编译,但是如果你使用代码并且函数调用正确它会工作。 Likememcpy(dest,ptr,size); 和我所写的内容足以理解必须按照此处所述进行操作。
  • -1 这与将指针传递给结构的方式完全相同,只是它不是类型安全且可读性差。
  • @JeremyP - 您忘记添加而没有在评论中实际声明结构。我同意你的其他观点,但 OP 要求提供替代方案。
  • @Praveen S:我的意思是这并不是真正的替代方案。它与传递结构完全相同,但没有明确定义内存块的结构。
猜你喜欢
  • 1970-01-01
  • 2013-04-20
  • 2016-10-05
  • 2022-08-05
  • 1970-01-01
  • 2022-11-25
  • 2012-01-03
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多