开发者社区> night李> 正文

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;

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MFC编写DLL窗口功能代码
MFC编写DLL窗口功能代码
19 0
MFC窗口创建机制
MFC窗口创建机制
19 0
MFC绘图操作
MFC绘图操作
24 0
MFC学习——如何在MFC对话框中添加一个显示网页的窗口(用vs2017以下版本,vs2017不支持)
MFC学习——如何在MFC对话框中添加一个显示网页的窗口(用vs2017以下版本,vs2017不支持)
220 0
Qt [GC9-4]:给我程序加上神秘的程序图标
Qt [GC9-4]:给我程序加上神秘的程序图标
53 0
VB源码升级后的几幅截图-VBIDE嵌入窗体、代码资源自动加入
用了整整两天的时间终于完成了功能上的升级,但多国语言版和数据库的加密还不知什么时间能做完,所以一时还不能发布,不过作为“内部人员”倒是可以先用为快:)
474 0
MFC创建单文档工程(为窗口添加背景图)
首先把BMP位图图片添加到资源文件res文件夹下; 其次,资源视图——VT_Ards.rc——右键选择添加资源,选择Bitmap,导入BMP图片并修改图片ID; 然后添加代码(详见MFC单文档工程为窗口添加背景图代码) ...
1474 0
+关注
night李
对机器视觉 图像处理有一定的兴趣 要做一条有梦想的咸鱼
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
《15分钟打造你自己的小程序》
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载