2

std::stringスレッドにを送信するにはどうすればよいですか?

これは私のコードです:

void* sendReminder(void*) 
{
    system("echo 'hello' >> buffer.txt");    
}

int main()
{
    string str1 = "somevalue";
    pthread_t t1;
    pthread_create(&t1, NULL, &sendReminder, NULL);
}
4

2 に答える 2

5

関数に「引数」を送信するには、4 番目の引数を使用pthread_createします。ただし、必ずヒープにコピーを作成してください。

string *userData = new string("somevalue");    
pthread_create(&t1, NULL, &sendReminder, (void *) userData);

pthread_join呼び出し元の実行を中断して新しいスレッドを待機するために使用する場合は、ローカル変数のアドレスを渡すだけで済みます。

if (pthread_create(&t1, NULL, &sendReminder, (void *) &str1) == 0)
{
    pthread_join(t1, &result);
    // ...

次の方法で値を取得できます。

void* sendReminder(void* data) 
{
    std::string* userData = reinterpret_cast<std::string*>(data);
    // Think about wrapping `userData` within a smart pointer.

    cout << *userData << endl;
}
于 2012-08-20T22:00:06.593 に答える
2

void*の最後の引数にとして値を渡しますpthread_create。スレッド関数内で、void*渡したオブジェクトの型にキャストします。この場合は文字列です。

于 2012-08-20T21:58:34.373 に答える