簡體   English   中英

如何在不使用C ++ / C的阻塞函數的情況下將值從線程返回到主函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM