`
shinepengwei
  • 浏览: 45820 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

MFC中多线程的应用

    博客分类:
  • C++
阅读更多

一. 使用线程步骤:

1. 定义线程函数传递参数结构

   如:

 

typedef struct tagTHREADPARMS
{
//CString content;
HWND hwnd;
int window;
int state;
Monitor *mm;
int thread_id;
}THREADPARMS;
 

 

2. 定义线程函数:

如:

 

UINT read(LPVOID pParam)
{
//一个函数而已
THREADPARMS *p=(THREADPARMS*)pParam;
HWND hwnd=p->hwnd;
int edit=p->window;
Monitor *mon=p->mm;
mon->add_reader(p);
SetDlgItemText(hwnd,p->state,"正在读取");
Sleep(2000);
char * str=new char[1000];
GetDlgItemText(hwnd,IDC_DISPLAY,str,1000);
SetDlgItemText(hwnd,edit,str);
mon->complete_reader(p);
SetDlgItemText(hwnd,p->state,"读取完成");
delete p;
return 0;
}
 

 

3. 启动线程

如:

THREADPARMS *ptp=new THREADPARMS;//初始化线程参数结构
ptp->hwnd=m_hWnd;//对PTP结构赋值
ptp->mm=mm;
ptp->window=window;
ptp->thread_id=thead_id;
ptp->state=state;
AfxBeginThread(read,ptp);//启动线程

 

 

二. 线程的挂起和重启

1. 挂起线程

SuspendThread(HANDLE);

注意:线程暂停后便停止运行,也就是说线程可以自己挂起自己,但无法自己唤醒自己。

2.唤醒线程

ResumeThread(HANDLE);

对于CWinThread 类,只要使用m_hThread成员,即为HANDLE变量。

 

超级注意:GetCurrentThread()得到的是一个当前的线程的handle,其实是一个伪HANDLE,是当前所有运行的线程环境的HANDLE。无法直接使用此函数得到的handle唤醒线程。但是使用一些其他函数后可以,我没有尝试。

 

还有,MFC中的线程是不安全的。不安全的含义是:当两个线程同时访问同一个临界资源时,系统会允许。这就会产生一些不可预知的错误。

解决的方法时使用进程的同步类或者自己编写代码实现线程互斥访问和同步。

更多内容欢迎访问围观IT

分享到:
评论

相关推荐

    MFC中利用多线程实现定时器

    在Windows编程环境中,MFC(Microsoft Foundation Classes)库提供了一种高效的方式来构建用户界面和应用程序。...通过不断学习和实践,你可以更好地掌握MFC多线程和定时器的运用,提升你的Windows应用开发技能。

    mfc中多线程的简单使用

    在Microsoft Foundation Classes (MFC) 中,多线程是一个强大的特性,它允许应用程序同时执行多个独立的任务,提高程序的响应性和效率。本文将详细介绍如何在MFC中创建、挂起和结束线程,以及相关操作。 一、创建...

    MFC创建多线程(工作者线程)demo

    多线程是MFC中的一个重要特性,它允许程序同时执行多个不同的任务,提高程序的效率和响应性。本篇文章将深入探讨如何在MFC中创建多线程,特别是工作者线程,并且会针对`AfxBeginThread`和`BeginThread`两种方法进行...

    MFC Opengl多线程框架

    MFC OpenGL多线程框架结合了这两个技术,允许开发者在同一个应用程序中同时处理图形渲染和其他计算任务,从而提升性能和用户体验。 在MFC中整合OpenGL,通常需要创建一个OpenGL窗口,通过`CWnd`或其子类的`OnPaint`...

    MFC中多线程的应用[定义].pdf

    总结来说,MFC中的多线程应用涵盖了线程的创建、同步、通信以及资源管理等多个方面,它为Windows应用程序提供了强大的多线程编程支持。通过理解这些概念和技巧,开发者能够更好地构建高效、稳定的多线程程序。

    基于MFC开发的多线程串口通信上位机

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库来开发一个基于C++的多线程串口通信上位机。MFC 是一个由微软提供的C++类库,它为Windows应用程序开发提供了丰富的接口,简化了Win32 API的...

    MFC多线程的创建,包括工作线程和用户界面线程

    ### MFC多线程的创建详解 #### 一、MFC多线程概述 MFC (Microsoft Foundation Classes) 是微软为简化Windows程序开发提供的一套类库,它封装了Win32 API,使得开发者能够更加方便地进行Windows应用程序的开发。在...

    MFC多线程例子

    MFC多线程是MFC库中的一个重要特性,允许开发者在同一个应用程序中创建和管理多个执行线程,从而实现并发处理任务,提高程序效率。在Windows操作系统中,多线程技术广泛应用于UI更新、后台数据处理、异步操作等场景...

    利用MFC进行多线程编程

    综上所述,MFC提供的多线程支持使得开发者能高效地在Windows环境中构建多线程应用程序。通过理解和熟练运用上述知识点,你可以创建出能充分利用多核处理器能力,实现并发操作的应用程序。文档"用VC++5.0实现多线程的...

    MFC GDI多线程绘图

    通过理解并实践这些知识点,你将能够有效地在MFC应用中实现GDI多线程绘图,提高程序的运行效率和用户体验。同时,了解如何正确管理线程和GDI资源,以及如何有效地实现线程间通信,对于编写高效、稳定的多线程程序至...

    MFC-TCP.rar_TCP通信_TCP通信MFC_mfc tcp 多线程_mfc tcp通信_mfc 多线程

    在IT领域,网络通信是应用程序之间交互的重要方式,而TCP(传输控制协议)作为网络通信的基础,被广泛应用于各种系统和应用中。本资源“MFC-TCP.rar”聚焦于如何在Microsoft Foundation Classes (MFC)框架下实现TCP...

    基于MFC和多线程的udp收发程序

    标题 "基于MFC和多线程的UDP收发程序" 提及了几个关键技术和概念,它们在现代软件开发,特别是Windows应用开发中占有重要地位。本文将深入探讨这些技术及其在程序中的应用。 首先,MFC(Microsoft Foundation ...

    MFC 多线程应用, 包括工作线程, 用户界面线程

    7. **示例代码**:在提供的压缩包"day19"中可能包含了9个不同的MFC多线程应用示例。这些示例可以帮助理解如何创建、管理线程,以及如何处理线程间的同步和通信问题。通过分析和运行这些示例,开发者可以更深入地学习...

    MFC多线程编程

    【MFC多线程编程】是Windows环境下使用Microsoft Foundation Class (MFC)库进行多线程应用程序开发的技术。MFC库是Visual C++提供的一种面向对象的类库,它简化了Windows API的使用,包括多线程编程。多线程在现代...

    MFC多线程开发例程源码1

    本示例代码“MFC多线程开发例程源码1”是针对MFC库进行多线程编程的一个实践案例,旨在帮助开发者理解如何在MFC应用中创建和管理多个执行线程。 首先,我们要明白什么是多线程。多线程是一种程序设计模型,允许应用...

    VS2013写的MFC多线程多串口编程,多串口可同时工作

    总结来说,VS2013的MFC多线程多串口编程涉及了Windows API的使用,通过多线程实现串口通信的并发处理,确保多个串口可以同时工作且互不干扰。这在需要处理大量串口数据或连接多个设备的应用场景中尤其重要,比如工业...

    DuoXianCheng.rar_MFC_MFC多线程_MFC多线程例子_MFC界面线程_mfc 多线程

    标题"**DuoXianCheng.rar_MFC_MFC多线程_MFC多线程例子_MFC界面线程_mfc 多线程**"暗示了我们将会讨论如何在MFC应用程序中实现多线程,特别是涉及到UI(用户界面)线程的管理。 MFC是微软为Windows平台开发的应用...

    MFC实例多线程实现背景音乐播放

    在MFC中实现多线程功能,可以让你的应用程序同时执行多个任务,例如在游戏或多媒体应用中播放背景音乐,而不会阻塞用户界面的其他操作。本篇文章将深入探讨如何使用MFC来实现一个多线程背景音乐播放的实例。 首先,...

    MFC多线程 工作者线程 用户界面线程

    一、MFC多线程基础 MFC通过CWinThread类支持多线程。每个线程都是一个独立的执行路径,拥有自己的堆栈和上下文。CWinThread是所有MFC线程的基类,负责线程的创建、调度和管理。创建新线程时,通常需要继承CWinThread...

    MFC WINSOCKET多线程编程实例

    本实例将探讨如何在MFC框架下结合WINSOCKET进行多线程编程,以实现更高效、更灵活的网络应用。 首先,了解WINSOCKET的基本概念至关重要。WINSOCKET是Windows对Berkeley Sockets接口的实现,它提供了一种标准化的...

Global site tag (gtag.js) - Google Analytics