Windows中OnTimer和线程

首先看看OnTimer的做法。

1 在类中

void CMyDialog::OnTimer(UINT nIDEvent)

{

if (nIDEvent == MY_TIMER)

{

//process something

}

CDialog::OnTimer(nIDEvent);

}

BOOL CODM_DlgShowImage::OnInitDialog()

{

SetTimer(MY_TIMER, 500, NULL);

}

2

void CMyApp::CreateDlg ()

{

if (m_pDlg)

{

m_pDlg->DestroyWindow();

delete m_pDlg;

m_pDlg = NULL;

}

m_pDlg = new CMyDialog ();

m_ pDlg ->Create(CMyDialog::IDD);

m_ pDlg ->SetContainer(&m_container);

m_ pDlg ->ShowWindow(SW_HIDE);

}

这样做有什么问题呢,我们先不说,然后看看用线程的做法。

void CMyApp::CreateDlg ()

{

if (m_pDlg)

{

m_pDlg->DestroyWindow();

delete m_pDlg;

m_pDlg = NULL;

}

m_pDlg = new CMyDialog ();

m_ pDlg ->Create(CMyDialog::IDD);

m_ pDlg ->SetContainer(&m_container);

m_ pDlg ->ShowWindow(SW_HIDE);

AfxBeginThread(ThreadProc, this);

}

UINT CMyApp::ThreadProc(void* p)

{

CMyApp * CApp = (CMyApp *)p;

while(1)

{

if ()

{

//process something;

}

else

{

break;

}

Sleep(200);

}

return 0;

}

采用线程的方式解决了什么问题呢,大家可以思考一下。

转载请注明原创连接:http://blog.csdn.net/wujunokay/article/details/44783473

时间: 2024-11-05 14:49:01

Windows中OnTimer和线程的相关文章

c#中如何跨线程调用windows窗体控件?(from www.sysoft.cc)

我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题 首先来看传统方法: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Thread thread = new Thread(ThreadFuntion); t

windows中根据进程PID查找进程对象过程深入分析

这里windows和Linxu系列的PID 管理方式有所不同,windows中进程的PID和句柄没有本质区别,根据句柄索引对象和根据PID或者TID查找进程或者线程的步骤也是一样的. 句柄是针对进程而言,也就是句柄一定所属于某个进程,为某个进程私有的资源.句柄的分配来自于进程私有的句柄表.而进程PID和线程TID和句柄的分配原理是一样的,但是来源就不同了.进程PID来源于系统中一张全局的句柄表PSpcidtable.从级别上来说Pspcidtable和进程对象eprcess中的objecttab

【windows核心编程】线程局部存储TLS

线程局部存储TLS, Thread Local Storage TLS是C/C++运行库的一部分,而非操作系统的一部分. 分为动态TSL 和 静态TLS 一.动态TLS 应用程序通过调用一组4个函数来使用动态TLS, 这些函数实际上最为DLL所使用. 系统中的每个进程都有一组 正在使用标志(in-use flag), 每个标志可被设置为FREE 或者 INUSE, 表示该TLS元素是否正在使用. 微软平台保证至少有TLS_MINUMUM_AVALIABLE个标志位可供使用, TLS_MINUMU

MFC中OnTimer的应用

OnTimer()函数用于实现定时控制功能,定时控制功能主要由下面三个函数共同实现: SetTimer, KillTimer()和OnTimer(). 粗略的说,Settimer是设置一个计时器并开始执行计时器Ontimer中的代码,Ontimer是计时器所执行的代码.KillTimer用于停止计时器. 或者说Settimer是设置定时器的,Ontimer是响应Settimer消息的.当Settimer设置的时间到了,就会自动调动Ontimer()函数. 先了解下SetTimer这个API函数的

Windows中7种定时器(VC定时器种类及占用资源对比)

VC中提供了很多关于时间操作的函数,利用它们控制程序能够精确地完成定时和计时操作.本文详细介绍了VC中基于Windows的精确定时的七种方式,如下图所示: 图一 图像描述 方式一:VC中的WM_TIMER消息映射能进行简单的时间控制.首先调用函数SetTimer()设置定时间隔,如SetTimer(0,200,NULL)即为设置200ms的时间间隔.然后在应用程序中增加定时响应函数OnTimer(),并在该函数中添加响应的处理语句,用来完成到达定时时间的操作.这种定时方法非常简单,可以实现一定的

windows C++ 互相等待线程同步示例

windows C++ 互相等待线程同步示例 开发中遇到线程同步问题,可抽象为如下模型: 1.主线程的继续执行的前提是子线程的变量已经初始化完毕. 2.子线程待主线程执行完毕后继续执行后续的初始化操作. 重复1,2执行--直到通信结束. 如下图所示: 源码(VS2010编译.运行通过) #include "stdafx.h" #include <iostream> using namespace std; #include <windows.h> const c

windows下进程与线程剖析

进程与线程的解析 进程:一个正在运行的程序的实例,由两部分组成: 1.一个内核对象,操作系统用它来管理进程.内核对象也是系统保存进程统计信息的地方. 2.一个地址空间,其中包含所有可执行文件或DLL模块的代码和数据.此外,它还包含动态内存分配,比如线程堆栈和堆的分配. 进程要做任何事情,都必须让一个线程在它的上下文中运行.该线程负责执行进程地址空间包含的代码.事实上,一个进程可以有多个线程,所有线程都在进程的地 址空间中"同时"执行代码.为此,每个线程都有它自己的一组CPU寄存器和它自

Windows中句柄和ID的区别

VC++菜单的句柄也可以理解成菜单的识别符(ID). 但如果指菜单项的ID, 那可能又是一回事了.按我的理解:  1. 句柄是程序运行中系统为其分配的,菜单项ID是编程者自己定义指定的.一般可在资源文件中定义也可在动态创建菜单时指定,程序中引用.  2. 菜单的句柄是属于菜单的,菜单项ID是属于菜单中某一个菜单项的.编程者通过菜单的句柄访问菜单,通过ID进行菜单项识别并进行消息处理.  3. 菜单的句柄类型是HMENU, 菜单项ID的类型是UINT(无符号整型).当然这两种类型本质上并无差别,但

Windows中mysql的配置文件,解决字符集编码问题,统一使用utf8字符集

登录到mysql数据库中,输入 show variables like "%character_set%"; 查看默认字符集 我们正常创建的数据库就是下面这样子的 (默认的字符集为 latin1) 这就会导致在Windows中使用的时候经常会因为字符集的编码问题出现不能导入其他的备份库的情况下,下面就给出两种解决方案 1.创建数据库的时候直接设置 create database myDatabase default char set utf8; 2.配置my.ini文件 在mysql安