c線程內控制超時
① 在c語言中,如何讓線程休眠給定的時間然後,如果在休眠期間有事件發生想喚醒該線程,又該怎麼做
用信號來處理。
線程等待某個信號,可以在給定時間到發送信號給線程,有事件發生時同樣發信號給線程
② 怎樣檢測線程的狀態(c代碼 )如:線程是死亡、阻塞、掛起等。
道線程還有這么多狀態的,線程主要狀態不是只有:創建-》就緒-》運行->阻塞-》終止 嗎?
我是用java的,介紹下java的Thread的方法
1. sleep()方法:sleep()允許指定以毫秒為單位的一段時間作為參數,它使得線程在指定的時間內進入阻塞狀態,不能得到CPU 時間,指定的時間一過,線程重新進入可執行狀態。這可以理解為休眠嗎?或者是阻塞?
2.yield() 方法:yield() 使得線程放棄當前分得的 CPU 時間,但是不使線程阻塞,即線程仍處於可執行狀態,隨時可能再次分得 CPU 時間。調用 yield() 的效果等價於調度程序認為該線程已執行了足夠的時間從而轉到另一個線程。
3.wait() 和 notify() 方法:兩個方法配套使用,wait() 使得線程進入阻塞狀態,它有兩種形式,一種允許指定以毫秒為單位的一段時間作為參數,另一種沒有參數,前者當對應的 notify() 被調用或者超出指定時間時線程重新進入可執行狀態,後者則必須對應的 notify() 被調用。
而我自己經常用的是在run()方法裡面用標識符,根據條件改變標識符的值來控制循環的運行,或者是監聽某個輸入條件,監聽不到就一直等待在那裡。
掛起我倒是在進程上聽過,
就緒掛起: 進程在內存外,但只要被調入內存就可運行
等待掛起: 進程在外存中,並且等待某件事情發生
不知道這和線程是不是一樣。
而阻塞,中斷和休眠在java裡面好像都是用sleep()來完成的,在我理解起來其實是一種狀態, 但因為我的水平問題,對內存什麼的沒什麼研究,所以我很期待有人能解答。
期待大神!
期待大神!
期待大神!
期待大神!
期待大神!
期待大神!
③ C語言中如何讓線程等待進程執行完一部分後,線程再繼續執行
#include"afxmt.h"
//全局變數
CEventevent(FALSE,TRUE);//第二個參數為TRUE表示手動信號
event.SetEvent();
//線程中要等待的地方
WaitForSingleObject(event,INFINITE)//永遠等待
......//線程中的代專碼
event.ResetEvent();//線程掛起屬
//-----------------------------------------------------
//以上代碼C好像不行,可以用笨辦法
//定義一個全局標識變數intflag=0;
//在線程中
while(flag==0)//在主線程中改變flag的值,一旦不為0,則執行線程中的代碼
{
Sleep(1);
}
......//線程要執行的功能
④ c語言如何釋放一個被阻塞住的線程
可以用線程同步機制進行,比如使用CEvent等
可以保留創建的線程指針,使用:
BOOL TerminateThread( HANDLEhThread,DWORDdwExitCode);
⑤ 在C中如何讓線程暫停/恢復/終止
暫停線程必須想一個辦法在能控制線程在能暫停的地方暫停,暫停點不能有任專何數據已經上鎖,上面屬說的那種while循環中也不能被暫停,還有一種就是當有大量內存被申請且還沒有釋放之前最好也不要被暫停。我建議大家用手動模式的信號量來實現。像這樣申請一個信號量:
hEvent=::CreateEvent(NULL,TURE,TURE,lpName);//第二個參數是TURE,設定為手動模式,防止::WaitForSingleObject改變信號量的狀態。
⑥ c語言多個線程循環次數極大時如何減小時間差實現同步運行
使用線程同步技術,可以協調多線程的同步問題
⑦ C語言線程如何終止
有三種方式可以終止線程,具體調用函數依賴於使用的線程系統。
1 在線程入口函數中,調用return。 即退出線程入口函數,可以實現終止當前線程效果;
2 在線程執行的任意函數,調用當前線程退出函數,可以退出當前線程;
3 在任意位置,調用線程終止函數,並傳入要終止線程的標識符,即pid,可以實現終止對應線程效果。
⑧ esp檢測線程超時0XC,請檢查電腦環境是否異常
多謝反饋,此類問題多由於當前網路遠程服務器有延緩連接的跡象,屬於偶回發現象。您可以在彈出提示語再答度彈窗時,按提示語操作,看看效果如何先。另外,建議試試看:安全衛士---功能大全---更多---DNS優選---添加並運行之---全面掃描---立即啟用360DNS優選根據您的網路環境幫您優選出來的伺服器或查看所有優選結果並在第1選擇其中兩項(新DNS需要重新撥號連接後方才自動生效)---肯定;1鍵清算---全選---肯定---立即清算;重啟主機---聯網---在線運行1段時間
記得採納啊
⑨ c語言多線程如何運行指定時間
第一步: 將源文件1(1.c)修改為如下形式: #include "print.h" #include "2.c" int main(void) { printHello(); return 0; } 其中的2.c就是源文件2的文件名版 第二步,將三個文件保存到同一權目錄中 第三步,打開TC2,執行FILE-CHANGE DIR,將工作目錄換到三個文件所在的目錄。 第四步,在TC2中打開1.c文件,編譯運行。 建議不要再使用TC2這個相對原始的IDE了,上面介紹的這個方法也並不是標准方法,建議使用TC2006/VC/BCB等現代的IDE環境,如果實在是舍棄不下DOS字元界面,那就試試GCC吧!
⑩ linux下C/C++如何實現非阻塞等待子線程結束
主線程可以使用一個數組存儲子線程的ID,不調用 pthread_join來等候子線程退出,要是版子線程退出後還權有工作要清理,可以使用 pthread_cancel_push函數來注冊退出控制流時調用的函數