帮忙看下这个自定义函数是做什么的?有关数据结构![已解决]
本帖最后由 love5173 于 2011-5-31 10:08 编辑在一次学习别人代码的时候,能看懂的部分修改成自己想要的代码命令了,这个我看不懂是做什么的,又不敢照搬所以问问谁知道这个是做什么的Func Mem()
Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, _
'int', False, 'int', @AutoItPID)
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle)
DllCall("kernel32.dll" , 'int', 'CloseHandle', 'int', $ai_Handle)
EndFunc ;一段C++的代码
//获取进程句柄
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,ProcessInfo.th32ProcessID);
if(hProcess)
{
SetProcessWorkingSetSize(hProcess,-1,-1);
//内存整理
EmptyWorkingSet(hProcess);
CloseHandle(hProcess);
}
根据以上注释和API解释,lz贴的代码应该是压缩自身进程内存用的.
原理可能是把不活动的物理内存数据 弄到 虚拟内存.
Func Mem()
#cs
OpenProcess(in DWORD dwDesiredAccess,in BOOL bInheritHandle,in DWORD dwProcessId);打开进程并获取进程的名称
dwDesiredAccess是访问进程的权限。
bInheritHandle是句柄是否继承进程属性。
dwProcessId是进程ID。
#ce
Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', @AutoItPID)
;PROCESS_ALL_ACCESS = (0x1F0FFF)
;BOOL WINAPI EmptyWorkingSet(inHANDLE hProcess);强制释放没被使用的内存页面
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle)
DllCall("kernel32.dll", 'int', 'CloseHandle', 'int', $ai_Handle);结束
EndFunc ;==>Mem
回复 3# 3mile
嗯,家里的技术员,说我的这个是修改网络指针的吓我一大跳,
起因是我在局域网安装了监控,但是总是出现网络被禁用的情况,这个函数我去掉以后还是有,后来把反复打开8899端口的函数关掉以后,情况就好转了。应该不是这个代码的问题 清空工作集,释放进程的内存指针占用,不过据说是把内存转到页面文件
页:
[1]