私はルーティング プロトコルを作成しています。スレッドを介して実装したネイバーごとに 30 秒のノンブロッキング タイマーが必要です。サンプル コードを次に示します。ただし、スレッドがタイムアウトしたか停止したかを区別するために、値が 2 または 0 であることを確認します (構造変数の値を設定してスレッドを停止しています)。
問題は、私の値がメイン関数に返されないことと、結合をブロックしていることがわかっている唯一の解決策ですが、ルーティングプロトコルには非ブロックが必要なことです。どんな助けでも大歓迎です。ありがとう。
struct arg_struct
{
int Wait_30sec;
int Alarm_port[5];
int index;
};
void* start_timer(void *arguments)
{
struct arg_struct *args = (struct arg_struct *)arguments;
int i;
clock_t endwait;
i = args->index;
endwait = clock() + args->Wait_30sec * CLOCKS_PER_SEC;
while (clock() < endwait && args->Alarm_port[i] == 0)
;
if(args -> Alarm_port[i]==0)
args -> Alarm_port[i]=2;
pthread_exit(NULL);
return NULL;
}