实例学MFC(1)--线程

 

 

通过实例我们来看看,MFC到底有多简单。

我们将要实现的例子是,在窗口中显示现在的时间,并实时更新。

我们是行动主义者,废话不多说,开始动手吧。

在VC6.0中,根据向导,建立一个MFC项目(exe,对话框式)。

给窗体添加一个EditBox,ID为IDC_TIME,显示时间用的。

双击OK按钮,建立OnOK()函数。

    HANDLE hThread;    
    DWORD ThreadID;  
void  CThreadDlg::OnOK() 
{
    
// TODO: 
    
    Sleep(
2000);
    MessageBox(
"线程即将运行!","对话框的题目",MB_OK);
    hThread
=CreateThread(     //hThread变量保存线程句柄,我们需要在头文件中添加
        NULL,        
        
0,        
        (LPTHREAD_START_ROUTINE)ThreadFunc, 
//ThreadFunc这个函数,待会我们再创建。    
        NULL,        
        
0,        
        
&ThreadID);    //ThreadID 线程的ID,也需要在头文件中追加

    
//CDialog::OnOK(); 这句是自动生成的,注释掉。
}

当点击OK按钮的时候,就启动线程。

然后就是在线程中实行的函数。这个函数需要放在OnOK前面,否则会出现没有定义的错误。

void  ThreadFunc( int  int_param)
{    
    CTime time;    
    CString strTime;    
   
 while(TRUE)    
    
{        
        time
=CTime::GetCurrentTime();    //取得现在的时间    
        strTime=time.Format("%H:%M:%S");        
        ::SetDlgItemText(AfxGetMainWnd()
->m_hWnd,IDC_TIME,strTime);    //显示时间    
        Sleep(1000);    //每秒更新一次
    }

}

OK!现在你可以编译运行一下,慢慢欣赏你的成果吧。

 

我们已经实现了我们要做的事情,但是为了让我们的工作看上去更专业些,我们需要润色润色。

我们需要做两件事情。

首先把我们的定义写到头文件中。
第二我们启动了线程,当然我们也必要能够终止线程,否则退出程序,线程还没终止,会有预想不到的后果。

我们在头文件中把定义加上

protected :
    HICON m_hIcon;

    HANDLE hThread;    
// 加上
    DWORD ThreadID;    // 加上
     volatile  BOOL m_bEndTread;  //  用于控制线程的终止
     void  ThreadFunc( int  int_param);   // 在这里定义了,就不用非要写在OnOk函数前头了

然后我们把的

while(TRUE

改成

m_bEndTread = FALSE
while(!m_bEndTread)  

让程序退出时,线程结束:双节Cancel按钮,添加OnCancel()函数

void  CThreadDlg::OnCancel() 
{
    
// TODO:     
    m_bEndThread = TRUE; //结束线程    

    MessageBox(
"ByeBye","",MB_OKCANCEL);

    CDialog::OnCancel();
}

OK。这样子,我们的作品就有点薘人的味道了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值