C語言中,對一段函式進行超時判斷,請問怎麼實現

時間 2021-07-02 12:35:53

1樓:

不知道你具體要幹什麼,timeSetEvent過時了,有代替api。

你提到setjmp和longjmp,我猜一下,可能是超時時,進入第三方dll的函式debug?

不過這玩意有很多限制,彈窗報錯估計是碰到限制了。

longjmp

2樓:acebear

關鍵點 WaitForSingleObject大致用法是這樣:

// 建立乙個Event

HANDLE

hDog

=CreateEvent

(nullptr

,TRUE

,FALSE

,nullptr

);// 另開乙個執行緒,在這個執行緒裡開始你的耗時函式// TODO: Start your job here in other thead

// 如果執行結束了,執行

// SetEvent(hDog);

// 下面回到原來的執行緒,下面這行會阻塞,僅當你設定的超時值或者SetEvent呼叫了,才會返回

DWORD

dwRet

=WaitForSingleObject

(hDog

,1000*10

);// 第2個引數是超時值(毫秒)if(dwRet

==WAIT_TIMEOUT

)elseif(

dwRet

==WAIT_OBJECT_0

)else

// hDog是作業系統管理的核心物件,需要手動釋放CloseHandle

(hDog);

3樓:Itaru Otaku

先貼乙個微軟的官方文件:

然後說一下大致的思路:

函式GetThreadTimes位於WinAPI的 "ProcessThreadsAPI.h" 中。

函式的引數:

BOOL

GetThreadTimes

(HANDLE

hThread

,LPFILETIME

lpCreationTime

,LPFILETIME

lpExitTime

,LPFILETIME

lpKernelTime

,LPFILETIME

lpUserTime

);我的思路是,用乙個單獨的執行緒執行你想要監測的函式,新開乙個執行緒執行GetThreadTimes函式,獲取被監測函式的執行時間。

超時的時候可以呼叫同樣在 "ProcessThreadsAPI.h" 中的TerminateThread函式。引數如下:

BOOL TerminateThread(HANDLE hThread,

DWORD dwExitCode

);TerminateThread:

c語言如何判斷乙個宣告到底是函式還是指標還是陣列還是什麼東西?

yuantj 從裡到外一步步看。設要求的型別為 T。第一步 找到識別符號名 T f第二步 注意到識別符號的左側有 符號,所以這是個指標 設被指型別為 F,則變成了 F f 第三步 識別符號的右側有 3 說明這是個含有 3 個指標的陣列 F f 3 第四步 外圍有函式指標的宣告,證明 F 是乙個函式型...

R語言中對乙個資料框進行分組後(group by)如何將同一組聚在一起顯示(不按原來的順序)

library tidyverse set seed 12 df tibble a sample 100,5 b sample 100,5 id sample LETTERS 1 2 5,replace TRUE df Atibble 5 x3 a bid int 1 6669A 290100B 3...

對一段很長的訊號進行分段FFT,對得到的分段FFT進行何種操作能得到整體訊號的頻譜特徵?

不知道題主現在解決這個問題了沒有呢?我目前也剛好遇到長序列做FFT變換的問題,上萬點的資料長度並不適合一次性做FFT,有沒有什麼分段之後的方法呢? 不二 搭車問問題分n段FFT以後第一段得到的某個頻點是 a1 i b1 第二段該頻點是a2 i b2 那麼該頻點是 a1 a2 an n i b1 b2...