全球旧事资料 分类
WaitForSi
gleObjecthThreadINFINITEGetDlgItemIDC_STARTE
ableWi
dowTRUE顺便说一下WaitForSi
gleObject函数,其函数原型为:DWORDWaitForSi
gleObjectHANDLEhHa
dleDWORDdwMilliseco
ds
fhHa
dle为要监视的对象(一般为同步对象,也可以是线程)的句柄;dwMilliseco
ds为hHa
dle对象所设置的超时值,单位为毫秒;当在某一线程中调用该函数时,线程暂时挂起,系统监视hHa
dle所指向的对象的状态。如果在挂起的dwMilliseco
ds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果超时时间已经到达dwMilliseco
ds毫秒,但hHa
dle所指向的对象还没有变成有信号状态,函数照样返回。参数dwMilliseco
ds有两个具有特殊意义的值:0和INFINITE。若为0,则该函数立即返回;若为INFINITE,则线程一直被挂起,直到hHa
dle所指向的对象变为有信号状态时为止。本例程调用该函数的作用是按下IDC_START按钮后,一直等到线程返回,再恢复IDC_START按钮正常状态。编译运行该例程并细心体会。
例程3MultiThread3
传送一个结构体给一个线程函数也是可能的,可以通过传送一个指向结构体的指针参数来完成。先定义一个结构体:typedefstructi
tfirstArgulo
gseco
dArgu…myTypepMyType创建线程时CreateThreadNULL0threadFu
cpMyType…在threadFu
c函数内部,可以使用“强制转换”:i
ti
tValuepMyTypelpvoidfirstArgulo
glo
gValuepMyTypelpvoidseco
ddArgu……例程3MultiThread3将演示如何传送一个指向结构体的指针参数。建立一个基于对话框的工程MultiThread3,在对话框IDD_MULTITHREAD3_DIALOG中加入一个编辑框IDC_MILLISECOND,一个按钮IDC_START,标题为“开始”,一个进度条IDC_PROGRESS1;打开ClassWizard,为编辑框IDC_MILLISECOND添加i
t型变量m_
MilliSeco
d,为进度条IDC_PROGRESS1添加CProgressCtrl型变量m_ctrlProgress;在MultiThread3Dlgh文件中添加一个结构的定义:structthreadI
foUINT
MilliSeco
d
fCProgressCtrlpctrlProgress线程函数的声明:UINTThreadFu
cLPVOIDlpParam注意,二者应在类CMultiThread3Dlg的外部。在类CMultiThread3Dlg内部添加protected型变量HANDLEhThreadDWORDThreadID分别代表线程的句柄和ID。在MultiThread3Dlgcpp文件中进行如下操作:定义公共变量threadI
foI
fo;双击按钮IDC_START,添加相应消息处理函数:voidCMultiThread3DlgO
StartTODOAddyourco
trol
otificatio
ha
dlercodehereUpdateDataTRUEI
fo
MilliSeco
dm_
MilliSeco
dI
fopctrlProgressm_ctrlProgresshThreadCreateThreadNULL0LPTHREAD_START_ROUTINEThreadFu
cI
fo0ThreadID在函数BOOLCMultiThread3DlgO
I
itDialog中添加语句:……TODOAddextrai
itializatr
好听全球资料 返回顶部