- 博客(17)
- 收藏
- 关注
原创 openGL学习 第一步 创建窗体
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){..... WNDCLASSEX windowC
2009-08-09 17:09:00
544
原创 重读COM本质的体会--第一章
1 接口与实现相分离: 原因接口是供外部调用者使用的,一般来说不要随便修改接口,原因是:1 使得外部调用者需要改代码,当调用层代码量很大的时候,可能会漏掉一些地方,使得出现未知错误。2 调用者必须重新编译程序,对于自动升级的程序来说需要替换很多部分,管理带来麻烦。等等很多原因, 我们希望我们的新DLL扔进程序就可以用。我们的实现部分有很多BUG,在维护过程中需要不断的修改程序,DLL也不断
2009-05-03 14:31:00
521
原创 API挂接的一个例子
测试DLL的函数APIHookDll.dll void __stdcall PrintfHelloWorld(){ printf("Hello World");} APIHook.exe代码#include //#include #include #include #include "APIHookDll.h"#pragma comment(lib, "ImageHlp")
2009-04-26 14:37:00
494
原创 共享内存进一步学习
HANDLE hFileMaping = NULL; do { hFileMaping = OpenFileMappingW(FILE_SHARE_READ | FILE_SHARE_WRITE, FALSE, L"jyytest"); if (NULL == hFileMaping) { hFileMaping = CreateFileMappingW(INVALID_HA
2009-04-06 11:36:00
384
原创 内存映射文件初步学习
HANDLE hFile = NULL; HANDLE hFileMaping = NULL; SYSTEM_INFO sysInfo; GetSystemInfo(&sysInfo); DWORD dwPageSize = sysInfo.dwAllocationGranularity; do { hFile = CreateFileW(L"D://pfsvoddata.bbv",
2009-04-06 11:09:00
375
原创 通过#pragma data_seg共享数据
#pragma data_seg("Share")volatile int g_nFirst = 0;int g_nSecond; //注意这里没有初始化,不能放入共享区#pragma data_seg()__declspec(allocate("Share")) int g_nThird = 0; //通过__declspec(alloca
2009-04-06 09:39:00
642
原创 关于virtualFree的回收
X864 CPU页面大小是4K, 4K表示物理内存扇入扇出以4K为单位, virtualFree如果使用DECOMMIT,那么一次要扇出的大小为4K的倍数.页面分配的粒度 64K, 意义就是 内存管理是按页来分的, virtualAlloc标志是MEM_RESERVE的时候,一次分配以64K为单位的大小,用户模式下,最大能分配到的总大小为2G, 分配好后并不意味着能够马上使用, 只有提交到物
2009-03-08 17:59:00
2182
原创 VirtualAlloc分配与回收
#include struct DEMOStruct{ BOOL bUsed; BYTE Buffer[2048 - sizeof(BOOL)];};class VMMGR{public: VMMGR(void); ~VMMGR(void);public: BOOL InitVMMgr(int nInitSectorCount); void CloseVMMgr(); BYTE *
2009-03-08 17:57:00
863
原创 枚举内存状况
#define SALFDELETE(pValue) / if (pValue) / delete[] pValue; / pValue = NULL;struct stuMemInfo{ void *pAllocAddr; wchar_t *pPageInitProtect; DWORD dwReginSize; DWORD dwState; wchar_t *pSt
2009-03-01 21:23:00
619
原创 获取内存使用状况
#include int _tmain(int argc, _TCHAR* argv[]){ MEMORYSTATUS myMemoryStatus; memset(&myMemoryStatus, 0, sizeof(MEMORYSTATUS)); myMemoryStatus.dwLength = sizeof(MEMORYSTATUS); GlobalMemoryStatus(&m
2009-03-01 16:26:00
445
原创 获取系统CPU和内存信息
#define SALFDELETE(pValue) / if(pValue) / delete[] pValue; / pValue = NULL;struct strSysInfo{ DWORD dwCPUNumber; wchar_t *pArchitecture; wchar_t *pProcessLevel; wchar_t *pPrcessVersion;
2009-03-01 15:57:00
787
原创 CreateTimerQueueTimer学习
#include VOID WINAPI WaitOrTimerCallBack(PVOID pContext, BOOLEAN bTimeOrWait);CRITICAL_SECTION g_cs;int _tmain(int argc, _TCHAR* argv[]){ wchar_t *pContent = (wchar_t *) malloc(sizeof(wchar_t)
2009-02-22 16:17:00
10352
原创 QueueUserWorkItem 初步学习
DWORD WINAPI TestThreadPool(PVOID pContext);CRITICAL_SECTION g_cs;int _tmain(int argc, _TCHAR* argv[]){ InitializeCriticalSection(&g_cs); SECURITY_ATTRIBUTES sa; sa.bInheritHandle = TRUE; sa.nLen
2009-02-22 15:42:00
1373
原创 抄WINDOW核心编程中的 多单写多读锁,
#pragma once#include class CSWMRG{public: CSWMRG(void); ~CSWMRG(void);public: void WaitToRead(); void WaitToWrite(); void Done();private: CRITICAL_SECTION m_cs; HANDLE m_hsemReaders; H
2009-02-15 22:04:00
904
原创 抄windows核心编程中很方便的一种加琐方式
使用临界区的一个类#include class CResLock{public: CResLock(void); ~CResLock(void);public: void Lock(void); void UnLock(void); BOOL IsLocked(void);private: CRITICAL_SECTION m_cs; int m_nLockNum;}; CRe
2009-02-15 11:17:00
456
原创 使用interlocked模仿CriticalSection 抄> 我加了注释
#include #include struct SHAREINFO{ DWORD dwSpinCount; //循环查询的次数 volatile LONG nLockCount; //任何线程调用Entry的次数 DWORD dwThreadID; //表明当前使用濒界区的线程ID int nRecurseCount; //本线程调用Entry的次数};class Test
2009-02-10 22:23:00
450
原创 互斥锁的联用
#include #include #include void ReversePrintf(wchar_t *pContent);unsigned __stdcall TestSemaphore(void *pParams);struct AsynInfo{ wchar_t stringInfo[2][1024]; int nUseIndex[2]; HANDLE hSemaph
2009-02-09 21:02:00
353
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人