涡流系统测试之读文件画图模块
2010-09-13 22:54
267 查看
#include <afxwin.h> #include <cstdio> #include <process.h> #define MAX 300 struct tag_point { short int x; short int y; }; tag_point points[MAX]; tag_point prev_points[MAX]; class CWindow : public CFrameWnd { public: CWindow() { this->Create(NULL,_T("Learning")); this->ShowWindow(SW_SHOW); this->UpdateWindow(); //创建内存DC hdc = ::CreateCompatibleDC(NULL); //获取当前DC CDC *pDC = GetDC(); HDC hDC = ::GetDC(NULL); //初始化位图 hbmp = ::CreateCompatibleBitmap(hDC,1400,1000); ReleaseDC(pDC); ::SelectObject(hdc,hbmp); RECT rc={0,0,1400,1000}; ::FillRect(hdc,&rc,(HBRUSH)(GetStockObject(BLACK_BRUSH))); } virtual ~CWindow() { ::DeleteObject(hbmp); ::DeleteDC(hdc); } protected: afx_msg void OnPaint() { CPaintDC dc(this); RECT rc; GetClientRect(&rc); //贴图 ::BitBlt(dc.m_hDC,0,0,rc.right - rc.left,rc.bottom - rc.top,hdc,0,0,SRCCOPY); } public: //内存位图. HBITMAP hbmp; HDC hdc; protected: //生成消息映射函数 DECLARE_MESSAGE_MAP(); }; BEGIN_MESSAGE_MAP(CWindow,CFrameWnd) //绘图消息映射函数~ ON_WM_PAINT() END_MESSAGE_MAP() class CApp : public CWinApp { virtual BOOL InitInstance() { //创建窗口 this->m_pMainWnd = new CWindow(); file = _tfopen(_T("D://1.dat"),_T("r+b")); if (file == NULL) { //打开文件失败 AfxMessageBox(_T("文件打开失败")); return 0; } fseek(file,0,SEEK_END); posEnd = ftell(file); fclose(file); posCur = 0; sizeCur = 0; sizePrev = 0; hMutex = NULL; //创建读文件线程 //this指针传递本对象给回调函数 hThreadFile = ::CreateThread(NULL,NULL,&CApp::ThreadReadProc,this,0,NULL); //创建画图线程 hThreadPaint = ::CreateThread(NULL,NULL,&CApp::ThreadPaintProc,this,0,NULL); return true; } virtual int ExitInstance() { ::CloseHandle(hThreadFile); ::CloseHandle(hThreadPaint); return CWinApp::ExitInstance(); } //读文件回调函数,传给函数的参数,这个的使用很需要锻炼! //静态成员函数不会传递this指针 static DWORD WINAPI ThreadReadProc(LPVOID lpParam) { CApp *pApp= (CApp*)lpParam; while (pApp->posCur < pApp->posEnd ) { //等待互斥对象的通知 WaitForSingleObject(pApp->hMutex,INFINITE); FILE *file = _tfopen(_T("D://1.dat"),_T("r+b")); //静态成员函数不能修改对象的的数据,因为没有传递this指针 //posCur = 0;非法! //通过传递给回调函数的指针,先转化成对象模型,再来修改对象的变量~~ fseek(file,pApp->posCur,SEEK_SET); //fseek((FILE *)(pApp->file),pApp->posCur,SEEK_SET); pApp->sizeCur = fread(points,sizeof(tag_point),MAX,file); //pApp->sizeCur = fread(points,sizeof(tag_point),MAX,(FILE *)(pApp->file)); pApp->posCur += pApp->sizeCur; //释放互斥对象 ReleaseMutex(pApp->hMutex); fclose(file); } //fclose((FILE *)(pApp->file)); return 0; } //画图线程回掉函数 static DWORD WINAPI ThreadPaintProc(LPVOID lpParam) { CApp *pApp= (CApp*)lpParam; int i; while (pApp->posCur < pApp->posEnd) { //等待互斥对象通知 WaitForSingleObject(pApp->hMutex,INFINITE); Sleep(200); //滚动~~ //擦除上次话的点 for(i = 0;i < pApp->sizePrev;i++) ::SetPixel(((CWindow *)(pApp->m_pMainWnd))->hdc,prev_points[i].x + 400,prev_points[i].y + 200,RGB(0,0,0)); //绘制本次的点 for(i = 0;i < pApp->sizeCur; i++) { ::SetPixel(((CWindow *)(pApp->m_pMainWnd))->hdc,points[i].x + 400,points[i].y + 200,RGB(255,10,0)); } //本次记录作为下次记录的prev~~ pApp->sizePrev = pApp->sizeCur; memcpy(prev_points,points,sizeof(points)); ////发送消息 调用OnPaint()函数 绘图 ((CWindow*)(pApp->m_pMainWnd))->Invalidate(FALSE); //释放互斥对象 ReleaseMutex(pApp->hMutex); } AfxMessageBox(_T("画图完成!~~")); return 0; } public: HANDLE hThreadFile; HANDLE hThreadPaint; FILE *file; long sizeCur; long sizePrev; long posCur; long posEnd; //线程同步~~使用临界区对象 //CRITICAL_SECTION cs; //互斥对象 HANDLE hMutex; }; CApp theApp;
相关文章推荐
- 关于如何使用内核模块来卸载文件系统(文件系统正在被使用)的测试和验证
- 分布式文件系统 - FastDFS 配置 Nginx 模块及上传测试
- Python os模块--路径、文件、系统命令等操作
- 分布式文件系统测试方法与测试工具
- IOzone 一种文件系统测试工具
- Node.js的文件系统模块(File System)
- proc文件系统模块编程-常见错误及解决方法
- 单独编译和使用webrtc音频回声消除模块(附完整源码+测试音频文件)
- iozone 测试文件系统
- Linux文件系统性能测试工具fdtree和iozone
- Mac终端(Terminal)自定义颜色,字体,背景 & Mac系统如何显示隐藏文件?& mac下载gcc并测试
- 十九、mcg-helper业务系统单表业务模块自动化生成生成js文件
- 测试环境搭建之centos系统给php安装php-memcached模块
- 测试文件系统
- 文件系统测试工具IOZONE
- OpenWrt中对USB文件系统的操作, 以及读写性能测试
- 使用Bonnie++测试磁盘和文件系统的性能
- kohana模块mocules是如何工作的(级联文件系统)
- 03 Python 文件系统 访问权限 函数 类与面向对象 自定义模块
- linux 监视文件系统inotify 测试