線程怎么暫停和恢復?
暫停線程執行的API函數是SuspendThread,聲明如下:
DWORD SuspendThread(HANDLEhThread);
其中,參數hThread是要暫停的線程句柄,該句柄必須要有THREAD SUSPEND RESUME訪問權限。如果函數成功就返回以前暫停的次數,否則返回-1,此時可以用GetLastError來獲得錯誤碼。當函數成功的時候,線程將暫停執行,并且線程的暫停次數遞增一次。每個線程都有一個暫停計數器,最大值為MAXIMUMSUSPENDCOUNT,如果暫停計數器大于零,線程則暫停執行。另外,這個函數一般不用于線程同步,如果對一個擁有同步對象(比如信號量或臨界區)的線程調用SuspendThread函數,則有可能會引起死鎖,尤其當被暫停的線程想要獲取同步對象的時候。恢復線程執行的函數是ResumeThread,但不是說調用該函數線程就會恢復執行,該函數主要是減少暫停計數器的次數。線程的暫停計數器如果恢復到零,線程才會恢復執行。
暫停線程執行的API函數是SuspendThread,聲明如下:
DWORD SuspendThread(HANDLEhThread);
其中,參數hThread是要暫停的線程句柄,該句柄必須要有THREAD SUSPEND RESUME訪問權限。如果函數成功就返回以前暫停的次數,否則返回-1,此時可以用GetLastError來獲得錯誤碼。當函數成功的時候,線程將暫停執行,并且線程的暫停次數遞增一次。每個線程都有一個暫停計數器,最大值為MAXIMUMSUSPENDCOUNT,如果暫停計數器大于零,線程則暫停執行。另外,這個函數一般不用于線程同步,如果對一個擁有同步對象(比如信號量或臨界區)的線程調用SuspendThread函數,則有可能會引起死鎖,尤其當被暫停的線程想要獲取同步對象的時候。
恢復線程執行的函數是ResumeThread,但不是說調用該函數線程就會恢復執行,該函數主要是減少暫停計數器的次數。線程的暫停計數器如果恢復到零,線程才會恢復執行。
線程的停止和暫停
1.使用退出標志,也就是等待 Run 方法運行結束
2.使用 stop 方法強行終止線程,但是這個方法已經過期而且是不安全的方式。 thorw java.lang.TnreadDeath
3.使用 interrupt 方法中斷線程(interupt方法和interupted或return結合)
4.異常法 throw new InterruptedException()
interrupt()方法
使用interrupt()方法來停止線程,但 iterrupt() 方法的使用效果并不像for+break那樣,馬上就停止循環。調用interrupt()方法僅僅是在當前線程中打了一個停止標記。
判斷線程是否終止:
interupted() 判斷當前線程是否已經中斷,執行后具有將狀態標志清除為fal的功能
isinterupted() 僅判斷對象是否是已經中斷的狀態
在Java多線程中可以使用 Suspend() 暫停線程,使用 Resume() 方法恢復線程
yield() 方法則是用來放棄當前CPU資源的,不過很可能馬上又獲得CPU時間片
如何讓正在運行的線程暫停一段時間
可以使用Thread類的Sleep()方法讓線程暫停一段時間。需要注意的是,這并不會讓線程終止,一旦從休眠中喚醒線程,線程的狀態將會被改變為Runnable,并且根據線程調度,它將得到執行。
可以使用thread.wait()方法來讓線程暫停一段時間,wait方法里面填寫的是暫停的時間的長度,一毫秒為單位,
易語言怎么暫停某線程
解決方案如下:
1.使用 (WINAPI)SuspendThread 暫停指定線程,函數原型如下:
DWORDWINAPISuspendThread(
_In_HANDLEhThread
);
2.使用 (WINAPI)ResumeThread 恢復指定線程,函數原型如下:
DWORDWINAPIResumeThread(
__inHANDLEhThread
);
EPL DLL命令聲明:
.版本2
.DLL命令WINAPI_SuspendThread,整數型,"Kernel32.dll","SuspendThread",,//暫停指定線程
.參數hThread,整數型,,//被暫停線程的句柄號
.DLL命令WINAPI_ResumeThread,整數型,"Kernel32.dll","ResumeThread",,//恢復指定線程
.參數hThread,整數型,,//被恢復線程的句柄號
上述2個WINAPI在操作時均是對引用計數的增減。如被暫停2次則應被恢復2次。
在C中如何讓線程暫停/恢復/終止
暫停線程必須想一個辦法在能控制線程在能暫停的地方暫停,暫停點不能有任何數據已經上鎖,上面說的那種while循環中也不能被暫停,還有一種就是當有大量內存被申請且還沒有釋放之前最好也不要被暫停。我建議大家用手動模式的信號量來實現。像這樣申請一個信號量:
hEvent=::CreateEvent(NULL,TURE,TURE,lpName);//第二個參數是TURE,設定為手動模式,防止::WaitForSingleObject改變信號量的狀態。
Java如何實現線程的暫停和重新啟用?求大神
JAVA中線程開始有start方法,暫停用sleep(time)方法,線程停止用stop方法,線程等待wait方法,java 中沒有線程重啟一說,只能說線程喚醒notifyAll()或是notify方法,前一個notifyAll()方法是喚醒所有的已休眠或是等待狀態下的線程。具體的一種參數請參照JDK文檔。