VC多线程编程实例

VC多线程编程实例MultiThread2该线程演示了如何传送一个一个整型的参数到一个线程中,以及如何等待一个线程完成处理。 1.建立一个基于对话框的工程MultiThread2,在对话框IDD_MULTITHREAD2_DIALOG中加入一个编辑框和一个按钮,ID分别是IDC_COUNT,IDC_START,按钮控件的标题为“开始”;2.在MultiThrea

 MultiThread2

该线程演示了如何传送一个一个整型的参数到一个线程中,以及如何等待一个线程完成处理。

 

1. 建立一个基于对话框的工程MultiThread2,在对话框IDD_MULTITHREAD2_DIALOG中加入一个编辑框和一个按钮,ID分别是IDC_COUNT,IDC_START ,按钮控件的标题为“开始”;

2. 在MultiThread2Dlg.h文件中添加线程函数声明:

void ThreadFunc(int integer);

  注意,线程函数的声明应在类CMultiThread2Dlg的外部。

  在类CMultiThread2Dlg内部添加protected型变量:

//线程句柄

HANDLE hThread;

//线程ID

DWORD ThreadID;

3.打开ClassWizard,为编辑框IDC_COUNT添加int型变量m_nCount。在MultiThread2Dlg.cpp文件中添加:

void ThreadFunc(int integer)

{

        int i;

        for(i=0;i<integer;i++)

{

            Beep(200,50);

            Sleep(1000);

        }

}

 

4.双击IDC_START按钮,完成该按钮的消息函数:

void CMultiThread2Dlg::OnStart()

{

        UpdateData(TRUE);

        int integer=m_nCount;

        hThread=CreateThread(NULL,

                           0,

                           (LPTHREAD_START_ROUTINE)ThreadFunc,

                           (VOID*)integer,

                           0,

                           &ThreadID);

        GetDlgItem(IDC_START)->EnableWindow(FALSE);

        WaitForSingleObject(hThread,INFINITE);

        GetDlgItem(IDC_START)->EnableWindow(TRUE);

}

 

顺便说一下WaitForSingleObject函数,其函数原型为:

DWORD WaitForSingleObject(

HANDLE hHandle,

                            DWORD  dwMilliseconds

);

  ● hHandle为要监视的对象(一般为同步对象,也可以是线程)的句柄;

  ●dwMilliseconds为hHandle对象所设置的超时值,单位为毫秒;

  当在某一线程中调用该函数时,线程暂时挂起,系统监视hHandle所指向的对象的状态。如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果超时时间已经到达dwMilliseconds毫秒,但hHandle所指向的对象还没有变成有信号状态,函数照样返回。参数dwMilliseconds有两个具有特殊意义的值:0和INFINITE。若为0,则该函数立即返回;若为 INFINITE,则线程一直被挂起,直到hHandle所指向的对象变为有信号状态时为止。

本例程调用该函数的作用是按下IDC_START按钮后,一直等到线程返回,再恢复IDC_START按钮正常状态。编译运行该例程并细心体会。

 —————————————————————————————->>>>>>>>>>>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/36695.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注