MFC多线程进行图片的显示

简介: 在MFC编程中开始学习都是只利用一个主线程,比较蛋疼的是,当你只用一个主线程进行如播放,查询时,MFC的界面会卡死,你无法进行其他的操作,这时需要进行多线程的编程,在操作时生成一个子线程来进行一些如播放,查询等的费时的操作。 多线程,经常会与对实时性要求比较高的并行运算结合,用来隐藏数据传输过程中用到的等待时间。 基于MFC的多线程在上一篇博客的基础上进行改进: 1.简

在MFC编程中开始学习都是只利用一个主线程,比较蛋疼的是,当你只用一个主线程进行如播放,查询时,MFC的界面会卡死,你无法进行其他的操作,这时需要进行多线程的编程,在操作时生成一个子线程来进行一些如播放,查询等的费时的操作。
多线程,经常会与对实时性要求比较高的并行运算结合,用来隐藏数据传输过程中用到的等待时间。
基于MFC的多线程在上一篇博客的基础上进行改进:
1.简单建立如下的界面:
这里写图片描述
2给各个控制按键添加消息响应函数:
主要是对播放按钮填加函数使在点击按钮时生成一个子线程来播放图片:

        zhanting=0;
        hThread=CreateThread(NULL,
        0,
        (LPTHREAD_START_ROUTINE)ThreadFunc,
        NULL,
        0,
        &ThreadID);
        GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
        GetDlgItem(IDC_STOP)->EnableWindow(TRUE);
        GetDlgItem(IDC_CONTIUN)->EnableWindow(FALSE);

通过调用CreateThread()函数来生成一个子线程;
在Dlg.h中声明句柄:

    HANDLE hThread;
    DWORD ThreadID;

GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
GetDlgItem(IDC_STOP)->EnableWindow(TRUE);
GetDlgItem(IDC_CONTIUN)->EnableWindow(FALSE);
为设置当按键被按下时其他各个框是否可被按下
下面是生成线程函数的代码:

    IplImage *image=NULL; //原始图像
    char filename[128];
    m_bRun=true;
    if(zhanting==0)
        i=2;
    else
    {
        i=weizhi;
    }
    for(;i<300;i++)
    {   
        UINT ID;
        ID=IDC_PICTURE;
        sprintf(filename,"5//%d.jpg",i);
        //if(image) 
        //  cvReleaseImage(&image);
        image = cvLoadImage(filename); //显示图片
        cvWaitKey(3);
        //DrawPicToHDC(image, IDC_Picture);
        //  CPicturesDlg.DrawPicToHDC(image, IDC_Picture);
        CDuoxiancDlg* pMainWnd=(CDuoxiancDlg*)AfxGetMainWnd();
        CDC *pDC = (CDC*)pMainWnd->GetDlgItem(ID)->GetDC();
        HDC hDC= pDC->GetSafeHdc();
        CRect rect;
        pMainWnd->GetDlgItem(ID)->GetClientRect(&rect);
        CvvImage cimg;
        cimg.CopyOf(image);
        cimg.DrawToHDC(hDC,&rect);
        pMainWnd->ReleaseDC(pDC);
        Sleep(30);
        cvReleaseImage(&image);
        if(!m_bRun)
        {
            weizhi=i;
            break;
        }
    }

由于生成子线程函数不继承Dlg类,所以要用声明一个Dlg类pMainWnd
由于这里还没有与数据库连接,直接在文件夹中放图片进行读取;
线程之间的通信,这里只是简单地定义了全局变量

volatile BOOL m_bRun;
volatile int weizhi;
volatile int i;
volatile int zhanting=0;

其他两个按钮的功能通过改变全局变量来控制播放的暂停继续。
这里写图片描述
如果你是魔女,我只要化身魔王就可以了…..

目录
相关文章
|
5月前
|
数据可视化 C++
MFC基本控件-静态文本的使用
MFC的基本空控件可以帮助大家快速做出一个可视化界面, 下面我将使用一个常见的采集表, 为大家说明常用基本控件的使用方法。 首先从最简单的静态文本开始。
|
2月前
|
存储 C++ 开发者
QT基础【4-简易的图片查看程序】
QT基础【4-简易的图片查看程序】
|
2月前
MFC窗口创建机制
MFC窗口创建机制
10 0
|
2月前
MFC编写DLL窗口功能代码
MFC编写DLL窗口功能代码
7 0
|
4月前
在MFC上基于halcon库的打开图片方法实现多次打开不同的图片
在MFC上基于halcon库的打开图片方法实现多次打开不同的图片
24 0
MFC学习——如何在MFC对话框中添加一个显示网页的窗口(用vs2017以下版本,vs2017不支持)
MFC学习——如何在MFC对话框中添加一个显示网页的窗口(用vs2017以下版本,vs2017不支持)
315 0
Qt [GC9-4]:给我程序加上神秘的程序图标
Qt [GC9-4]:给我程序加上神秘的程序图标
86 0
Qt [GC9-4]:给我程序加上神秘的程序图标
使用Halcon库,在MFC界面打开显示图片,可实现多次打开不同图片
使用Halcon库,在MFC界面打开显示图片,可实现多次打开不同图片
342 0
VB源码升级后的几幅截图-VBIDE嵌入窗体、代码资源自动加入
用了整整两天的时间终于完成了功能上的升级,但多国语言版和数据库的加密还不知什么时间能做完,所以一时还不能发布,不过作为“内部人员”倒是可以先用为快:)
527 0
|
C#
WPF调用图片路径,或资源图片
原文:WPF调用图片路径,或资源图片 一、加载本项目的图片WPF引入了统一资源标识Uri(Unified Resource Identifier)来标识和访问资源。其中较为常见的情况是用Uri加载图像。
2320 0