防止應用程式被網路操作失敗卡死的演算法

2021-04-27 02:25:03 字數 1450 閱讀 9135

在某個同事留下的網路操作**中,如果使用者試圖從網路開啟乙個實際並不存在的url, 走到internetopenurl這步,應用程式就一命嗚呼了。這個api並沒有按照文件上說的那樣返回乙個null給檔案handle,而是完全停止 響應。他嘗試使用internetsetoption來設定超時的時限,**裡這樣寫

dword n = 10000;

internetsetoption(p->internet, internet_option_connect_timeout, &n, sizeof(n));

但沒有實際效果。從後文可以猜測,internetopenurl再去呼叫了網路的io處理,在io處理中被卡死,罪過似乎並不在internetopenurl和wininet.dll這層上.

於是他在前面某次工作記錄裡說已經解決了這個問題,然後又被測試組罵回來說沒效果. 我搜到了開源**裡乙個很好的演算法, 自己測試了下,的確有效。讓我們來看下它的演算法,確實很精妙. 整個演算法的核心是用非同步方式來處理wininet.dll提供的那些函式

具體實現**如下:

static

void

callback internetcallback(hinternet hinternet,

dword dwcontext,

dword dwinternetstatus,

lpvoid lpvstatusinformation,

dword dwstatusinformationlength)}

當等到internet_status_request_complete通知的時候, 把result獲取下來放在p->completeresult裡面,然後setevent. 也就是說系統callbac**程和其他什麼執行緒進行通訊了

(3) 在internetopenurl的時候**如下:

result 

=(dword)internetopenurl(p

->

internet, url, s, (dword)-1

, internet_flag_no_cache_write

|secure, (dword)p);

p->

handle 

=(handle)pending(p, result , 

30);

if(result 

||getlasterror() 

!=error_io_pending)

else

else}

**中把流程圖中的左邊執行緒, 從呼叫api觸發callback開始, 到底端取得handel這塊演算法封裝為乙個函式, 可以被其他對wininet.dll介面函式的操作共用, 如internetreadfile等.

Android應用程式防止被LMK乾掉

二 調查 quote android 系統對於記憶體管理有自己的一套方法,為了保障系統有序穩定的運信,系統內部會自動分配,控制程式的記憶體使用。當系統覺得當前的資源非常有限的時候,為了保 證一些優先順序高的程式能執行,就會殺掉一些他認為不重要的程式或者服務來釋放記憶體。這樣就能保證真正對使用者有用的...

如何防止應用程式洩密?

黑客或攻擊者總能找到一些可以利用的媒介或要素。例如,員工越來越多地在工作場合使用移動裝置,各種應用商店提供了五花八門的移動應用。由於這些應用的源頭不一,質量參差不齊,所以普通使用者很難判斷哪些是最新的,更難以判斷其是否有惡意目的。黑客深諳此道,因而可以設計一些看似善意的功能強大的應用,其中卻可能包含...

C 操作exe應用程式

首先,操作和呼叫並不一樣,在我看來,呼叫也許就是直接執行這個exe檔案,而我所說的操作就類似於在cmd裡面用命令列的方式來獲得資訊互動。這次,我們需要使用c 語言的方式來動態操作exe應用程式。雖然聽起來可能很高大尚,但是實質上主要就兩種操作,乙個是向命令列寫入資料的操作,另乙個則是讀取命令列的結果...