日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3内核对象

發布時間:2025/4/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3内核对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天坐著無聊,突然想到,如果A進程分配足夠多的內核對象后,過一段時間A還能分配內核對象嗎?,猜想應該是可以的,因為內核對象空間是由內核分配的,

所以做了個小實驗:

我們都知道,創建線程內核對象引用計數為2,線程退出減一,closehandle減一,所以不調用closehandle,那么內核對象就會存在,直接用個工具Process Explorer

直接上代碼:

static DWORD WINAPI WinMain(LPVOID lp);


?

DWORD WINAPI CDEMO1Dlg::WinMain(LPVOID lp) {return TRUE; }


?

CString GetMyLastError() {DWORD dwError = ::GetLastError();HLOCAL hlocal = NULL; // Buffer that gets the error message stringDWORD systemLocale = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);BOOL fOk = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS |FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, dwError, systemLocale, (PTSTR) &hlocal, 0, NULL);CString szErr = _T("");if (fOk){szErr = (PCTSTR) LocalLock(hlocal);}LocalUnlock(hlocal);LocalFree(hlocal);return szErr; }void CDEMO1Dlg::OnBnClickedButton1() {int i=10009;while (i){HANDLE m_h = CreateThread(NULL, 0, WinMain, this, 0, NULL);i--;if (!m_h){CString sz;sz.Format(L"%d", GetLastError());AfxMessageBox(sz);} } }


好吧,我很無聊的用了WinMain函數做為線程入口函數,這表明線程函數可以任意命名

先介紹下ProcessExplorer,

選中Show Lower Pane后,出現Type,Name(下面部分),這就是句柄信息,

選中Demo1.exe

運行上面的代碼:

我們發現名稱為Thread有一堆了,這都是線程內核對象,最后分配不了了,彈出下面的框;

,這時是不是意味著Demo1.exe進程不能再分配內核對象了?,把代碼改下:

void CDEMO1Dlg::OnBnClickedButton1() {int i=0;while (true){HANDLE m_h = CreateThread(NULL, 0, WinMain, this, 0, NULL);if (!m_h){CString sz;sz.Format(L"共成功分配了%d個內核對象",i);AfxMessageBox(sz);break;} i++;} }

多次運行后,我們發現,過一段時間Demo1.exe進程還能再分配內核對象了,估計系統從其他地方又擠出分配空間了,沒完沒了了!

轉載于:https://www.cnblogs.com/hgy413/archive/2012/04/04/3693541.html

總結

以上是生活随笔為你收集整理的3内核对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。