Windows多线程编程.doc8
1
Windows多线程编程
作者:韩飜旭
多线程编程之 问题提出 2
一、 问题的提出 2
二、 多线程概述 2
三、 Win32 API对多线程编程的支持 3
四、 Win32 API多线程编程例程 4
其中以参数 说明如卜•:
lpThreadAttiibutes:指向 个SECl>ITY_ATTRIBUTES结构的指针,该结构决泄了线程的 安全属性,一■般置为NULL:
dwStackSize:指定了线程的堆栈深度,一般都设置为0:
IpStaitAddress:衣示新线程开始执行时代码所在两数的地址,即线程的起始地址。一般情况 为(IJPTHREAD_START_ROUTINE)ThreadFuiic, ThreadFuiic 是线程函数名;
IpParameter:指定了线程执行时传送给线程的32位参数,即线程两数的参数; (h^reationFlags:控制线程创建的附加标,忐,町以取两种值。如果该参数为0,线程在被创 建后就会工即开始执彳『;如果该参数为CREATE_SUSPENDED、则系统产生线程后,该线程 处丁挂起状态,并不马上执行,直至函数ResumeTlnead被调用: lpThreadld:该参数返回所创建线程的ID: 如果创建成功则返冋线程的旬柄,否则返MNULLo
2、 DWORD SuspendThiead(HANDLE hTliread);
该函数用「•挂起指定的线程,如果两数执行成功,则线程的执行被终止。
3、 DWORD ResumeThiead(HANDLE hTliread);
该函数用结束线程的挂起状态,执彳线程。
4、 VOID ExitThread(DWORD dwExitCode);
该函数用「线程终结自身的执行,主耍在线程的执行两数中被调用。比中参数dwExitCode 用来设置线程的退出码。
5、 BOOL TeiiniiiateThread(HANDLE hTluead,DWORD dwExitCode);
一般情况下,线程运行结束z后,线程函数正常返回,但是应用程序可以调用
TeniuiiateTliread强行终止某一线程的执行。各参数含义如2
hThread:将被终结的线程的句柄; dwExitCode:用丁•指定线程的退出码。
使用TenmnateTlireadO终止某个线程的执行是不安全的,町能会引起系统不稳定:虽然 该函数立即终止线程的执行,但并不释放线程所占用的资源。|対此,一般不建议使用该函数.
6、 BOOL PostThieadKIessage(DWORD ldThiead,
UINT Msg,
WPARAA1 wParam, LPARANI IParam);
该函数将一条消息放入到指定线程的消息队列中,并1L不等到消息被该线程处理时便返冋。 idThread:将接收消息的线程的ID;
Msg:拆定用來发送的消息:
wParam :同消息仃关的字参数;
8
5
IParam :同消息有关的长参数:
调川该函数时,如果即将接收消息的线程没仃创建消息循环,则该函数执疔火败。
四、Win32 API多线程编程例程
例程 1 MultiThread 1
建龙一个基「对话框的匸程MiiltiTlireadl,在対话框IDD_MULTITHREAD 1 DIALOG中加 入两个按钮和-个编辑框,两个按钮的ID分别是IDC_START, IDC_STOP ,标题分别为
“心动",“停止",IDC_STOP的属性选»|' Disabled:编辑框的ID为IDC_TIME ,属性选 中 Read-only:
•明:
void ThieadFunc();
注意,线程两数的声明应在类CMultiTlireadlDlg的外部。在类CMdtiTlireadlDlg内部添加 protected 型变最:
HANDLE hTliread;
DWORD ThreadlD:
分别代表线程的句柄和ID。
在 文件1 "添加全局变 hi ni bRun :
volatile BOOL m bRiui;
m_bRun代表线程是否正在运行。
你要留意到全局变鼠:m bRun是便用volatile修饰符的,volatile修饰符的作用是告诉编译 器无需对该变鼠作任何禹优化,即无需将它放到一个寄存器中,并且该值可被外部改变。对 于多线程引用的全局变鼠来说,volatile是一个非常觅要的修饰符。
编写线程函数:
void TlueadFuncO
{
CTrnie tim
Windows多线程编程 来自淘豆网m.daumloan.com转载请标明出处.