1

我刚开始使用 tinycthread.h 进行并发编程。但是,我不知道如何使用它。目前,我想知道如何用这个库创建一个线程函数。

这是 tinycthread 库中列出的两个函数

typedef int(* thrd_start_t)(void *arg)
int thrd_create (thrd_t * thr,thrd_start_t func,void * arg )        

我想创建一个以整数为参数的线程函数。

int Haha (int a){} ->  to be my thread function

int main(){
thrd_t t;
thrd_create(&t,Haha,int a);

}

我在我的程序中写了这样的东西。

但是由于typedef int(* thrd_start_t)(void *arg)typedef 的接受方式是这样的,它不允许我将任何整数作为我的参数。那么我应该怎么做才能创建一个以整数为参数的线程函数。

4

2 回答 2

1

的参数Hahamust be void *not int,所以尝试通过一些转换来传递你的整数输入:

int Haha (void *arg)
{
    int *a = static_cast<int*>(arg);

    printf("%d", *a);
    return 0;
}

int main()
{
    int param = 123;

    thrd_t t;
    thrd_create(&t, Haha, &param);
    thrd_join(t, NULL);
}

由于TinyCThreadTinyThread++的 C 替代品,因此您应该使用该 C++ 类库。

另外,C++ 支持std::thread看看它。

于 2013-10-25T15:44:07.643 回答
1

将指针传递给包含int您要传递的值的变量:

int a = 10;
thrd_create(&t, Haha, &a);
...

int Haha(void *ptr) {
   int *ap = static_cast<int*>(ptr);
   int a = *ap;

}

如果您打算通过ap指针写入,请确保指向的对象没有超出范围。

于 2013-10-25T15:44:14.947 回答