2011-12-05 17 views
-2

私はRefreshViews()関数の最後でスレッドを実行する次のシナリオ、メソッドの終了後にスレッドを実行しますか?

void* Refresh(void *) 
{ 
usleep(10); 
.. 
} 

static void RefreshViews() 
{ ... 
    pthread_t t; 
    pthread_create(&t, NULL, &Refresh, NULL); 
    ... 
} 

を持っています。それが正常に機能するには、Refresh()関数の実行開始時に別のスレッドでsleepを追加しました。

この状況をよりうまく処理するにはどうすればよいですか?

+0

関数を終了する直前にスレッドを作成しますか? –

+0

他のスレッドは少し遅れて開始しますか? – OSH

+0

正常に動作しないのはなぜですか? – TheJuice

答えて

1

あなたが使用できる3つの方法があります。

  1. 私はあなたが機能を去る直前にスレッドを起動し、私のコメントで言ったように。

  2. RefreshViewsを呼び出す関数でスレッドを作成します。

  3. は、それが実際の関数へのプロキシとして動作し、余分な機能を持ち、どのスレッドを作成します。第一の方法について

    static void RefreshViews() 
    { 
        RealRefreshViews(); 
        pthread_t t; 
        pthread_create(&t, NULL, &Refresh, NULL); 
    } 
    

一つのこと、あなたが覚えているということです関数の最後の前に明示的なreturnがある場合はスレッドを作成してください。またはreturnの代わりにgotoを使用してスレッドを作成してください。

0

静的関数のoutsiteをthraedに定義するか、静的関数も同様に定義します。関数内のスレッドハンドルは、関数を終了するとすぐに破棄され、tはスタックからポップされます。スレッドを制御する必要がない場合(またはクリーンな方法でスレッドを削除する場合)、スレッドをそのままにしておきます。

関連する問題