1

並行プログラミングを行うために tinycthread.h を使い始めました。しかし、私はそれを使用する方法を知りませんでした。現在、このライブラリでスレッド関数を作成する方法を知りたいです。

tinycthread ライブラリにリストされている 2 つの関数を次に示します。

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の受け入れtypedef int(* thrd_start_t)(void *arg)はこのように行われるため、パラメーターとして整数を入れることはできません。では、整数をパラメーターとして使用してスレッド関数を作成するにはどうすればよいですか。

4

2 に答える 2

1

の引数は であってはHahaならvoid *ない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);
}

TinyCThreadは TinyThread++ の 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 に答える