[英]How to return value from the thread back to main function without using blocking function in C++/C
我正在制定路由協議,我需要通過線程實現的每個鄰居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;
}
根據您的代碼,當您將值傳遞給線程時,該值應反映到主線程。 我建議像這樣調試代碼:
1)首先檢查對線程的調用,並確認您發送了正確的struct變量的地址。 然后查看是否檢查了結果的正確變量。
2)在調用線程之前是否設置了結構的index
變量?
3)可能由於等待的最終值中的錯誤導致線程無法完成。 嘗試將當前值和結束值打印到stdout或文件中,然后查看循環是否終止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.