yeammy
驱动牛犊
驱动牛犊
  • 注册日期2002-12-27
  • 最后登录2012-02-22
  • 粉丝0
  • 关注0
  • 积分63分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:963回复:0

****大家来看看设置进程优先权和地址空间的程序***

楼主#
更多 发布于:2004-09-22 21:30
大家看看下面的设置进程优先级和工作集大小的程序,想改变进程地址空间大小,请看看有什么问题没有。
#include"stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <malloc.h>
#include <conio.h>

#define RAID_DISK "d:\\ecdr1480.dat"
#define X86_PAGE_LEG        0x1000   //1页4KB

#define  BufferNum    64 //MB
#define  BufferSize    128*2*4*1024    //1MB
int main(int argc,char **argv)
{
 HANDLE dsk320;
 OVERLAPPED    gOverlapped;
   __int8 *pBuffer,*pBufferX;
DWORD ByteSize,ByteReturned,FileSize;

 HANDLE hProcess;
 DWORD priority,MiniSize,MaxSize;

// Create Event for overlapped structure
 gOverlapped.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
 if(NULL==gOverlapped.hEvent) printf("Error: couldn't open an event\n");
 dsk320=CreateFile(RAID_DISK,                                    
                   GENERIC_READ|GENERIC_WRITE,                      
                   FILE_SHARE_READ | FILE_SHARE_WRITE,              
                   NULL,                                            
                   CREATE_ALWAYS,                                    
                   FILE_FLAG_NO_BUFFERING,                          
                   NULL);  
 ////////////////////////////
 hProcess=GetCurrentProcess();
 priority=GetPriorityClass(hProcess);
 printf("\n Current process priority : %d\n",priority);
//priority=REALTIME_PRIORITY_CLASS;//256
 priority=HIGH_PRIORITY_CLASS;//128
 if(SetPriorityClass(hProcess,priority))
 {
printf(" \nSet priority is successful!\n");
 }
 else
 {
printf(" Set priority is failure!\n");
 }
  priority=GetPriorityClass(hProcess);
 printf(" Current process priority : %d\n",priority);

 if(GetProcessWorkingSetSize(hProcess,&MiniSize,&MaxSize))
 {
printf("\n The first get process workingSetSize:\n MiniSize:%f MB\n MaxSize:%f MB\n", (float)MiniSize/1024/1024,(float)MaxSize/1024/1024);
 }
 else
 {
printf("Get process WorkingSetSize is failuer!\n");
 }
MiniSize=70*1024*1024;
 MaxSize=100*1024*1024;
if(SetProcessWorkingSetSize(hProcess,MiniSize,MaxSize))
{
printf("\n set process WorkingSetSize is successful!\n");
}
else
{
printf("set process WorkingSetSize is failuer!\n");
}
if(GetProcessWorkingSetSize(hProcess,&MiniSize,&MaxSize))
 {
printf("\n The second Get process workingSetSize:\n MiniSize:%f MB\n MaxSize:%f MB\n\n", (float)MiniSize/1024/1024,(float)MaxSize/1024/1024);
 }
 else
 {
printf("Get process WorkingSetSize is failuer!\n\n");
 }
 ////////////////////////////////
 pBufferX=(__int8*)VirtualAlloc(0,BufferSize*BufferNum+X86_PAGE_LEG,MEM_COMMIT,PAGE_READWRITE);
 ByteSize=BufferSize*BufferNum;
 pBuffer=(UCHAR*)pBufferX;
 WriteFile(dsk320,pBuffer,ByteSize,&ByteReturned,NULL);
 FileSize=GetFileSize(dsk320,NULL);
 printf(" \n FileSize is:%f MB\n",(float)FileSize/1024/1024);
 VirtualFree((void*)pBufferX,BufferSize*BufferNum+X86_PAGE_LEG,MEM_RELEASE);
 CloseHandle(gOverlapped.hEvent);
 CloseHandle(dsk320);                                                
printf("Finished ...  OK !\n");
 return 0;
}
该程序可以运行。
运行的结果是不能对文件d:\\ecdr1480.dat进行写数据,我的本意是想通过修改进程的优先权,改变进程的工作集的大小,可是能够修改成功,但是当用WriteFile向文件写入数据的时候,如果缓存大小超过63MB,就不能向文件写入数据,在63MB下可以,请问为什么?有什么办法?修改工作集大小,是修改进程的地址空间吗?
游客

返回顶部