创建两个线程thread1 和thread2
更新时间:2024-01-22 19:34:02 阅读量: 教育文库 文档下载
创建两个线程thread1 和thread2,由thread1发消息给thread2,消息的内容是一个结构体 Struct A{ Int ..; Char ..; }
2收到消息后要告知1以收到,最后1要发布消息证明2已收到。
思路:1.创建线程,要知道createthread函数怎么使用(其中还要理解句柄的含义和用途); 2.创建后每个线程要实现各自的功能,可以使用event控制线程之间的执行过程。 3.将结构体作为消息时要注意消息的格式,和MSG函数的结构。 具体代码如下: #include
//变量的定义
HANDLE hthread1;//定义全局变量 句柄1和句柄1,注意句柄的定义是以h开头的单词。 HANDLE hthread2;
HANDLE hstartevent;//定义事件句柄
unsigned nThreadID1; //定义线程1和2的线程ID unsigned nThreadID2;
//要传送的结构体 struct MyData{ int num; char name; };
struct MyData MyData1={1,'a'};//定义MyData类型的变量MyData1,并赋初值。 struct MyData *pMyData1=&MyData1;//定义一个MyData类型的指针pMyData1,并让她指向
//已经赋好初值的结构体MyData1
//编写线程的功能函数,让它们实现题目中的要求 DWORD WINAPI thread1(LPVOID IpParam){
UINT mymessage =0; //定义一个消息 printf(\此时1已被创建,向屏幕上输出语句 3 SetThreadPriority(hthread1,THREAD_PRIORITY_ABOVE_NORMAL);//为1设置优先级4 printf(\获得优先级并输出5
/*发送消息,注意,消息是发送到消息队列中的,所以我们要等待对方的消息队 列创建完成。*/ WaitForSingleObject(hstartevent,INFINITE);//等收方确定已经创建好消息队列的信号。1 printf(\发布要发送消 4
//息的内容
PostThreadMessage(nThreadID2,mymessage,(WPARAM)pMyData1,(LPARAM)NULL);//发消息.5 WaitForSingleObject(hstartevent,INFINITE);//等待收方发送确定已经收到消息的信号 6
printf(\发布2真的已经收到消息了 最终 return(0); }
DWORD WINAPI thread2(LPVOID IpParam){ MSG msg;//定义一个MSG结构的消息,注意MSG是一个结构体 struct MyData *pData;//定义一个用于承载消息的指针,post时我是用指针的形式找到我//要发送的结构体的,所以此处也要用指针接收。 printf(\
SetThreadPriority(hthread2,THREAD_PRIORITY_LOWEST); 7 printf(\ //接受消息 PeekMessage(&msg,(HWND)NULL,(UINT)NULL,(UINT)NULL,(UINT)PM_NOREMOVE);//创建一个消息队列后2 SetEvent(hstartevent);//设置hstartevent为有信号状态,用于通知发方已经创建好消息队列。3返回1
GetMessage(&msg,0,0,0);//从消息队列中取消息并放于指定结构 7
if (msg.message==0)//如果得到的结构体中的message值为我设置的初始值,也就是说 //收到1发送的消息了 8 {
}
pData=msg.wParam;//就把post过来的指针传给一个新的指针
printf(\发布已收到的消息。9
SetEvent(hstartevent);//设置hstartevent为有信号状态,用于通知发放已经收到消息。10返回6 return(0); }
int main() { hstartevent=CreateEvent(NULL,FALSE,FALSE,NULL); //自动恢复为无信号状态,初始无无信号状态 hthread1=CreateThread(NULL,0,thread1,NULL,0,&nThreadID1); 1 hthread2=CreateThread(NULL,0,thread2,NULL,0,&nThreadID2); 2
WaitForSingleObject(hthread1,INFINITE); //等待thread1执行结束。 WaitForSingleObject(hthread2,INFINITE);//等待thread2执行结束。 //关闭所有句柄。 CloseHandle(hthread1); CloseHandle(hthread2); CloseHandle(hstartevent); }
函数说明:
1 SetThreadPriority函数的参数有两个,第一个是要设置函数的句柄,如要设置thread1,则此处要写thread1的句柄---- hthread1. 第二个是要设置的优先级的等级,有几个不同的等级可以选择,此处我们设置1的优先级比一般的高:THREAD_PRIORITY_ABOVE_NORMAL。2的优先级低:THREAD_PRIORITY_LOWEST。
2 GetThreadPriority函数的参数只有一个即线程的句柄。
3 WaitForSingleObject函数的参数有两个,一个是句柄,一个是等待的时间,如WaitForSingleObject(hstartevent,INFINITE)就是要一直等待startevent这个事件有信号。
4 PostThreadMessage函数的参数有四个,第一个为消息发送目的地的ID。第二个是消息的类型,可以理解为消息的名称,是UINT类型的,在功能函数开始时要定义它。第三和第四个参数都是附加消息信息,是WPARAM或者LPARAM类型的,在此题目中,我利用指向结构体的指针来传送这条消息。
5 PeekMessage函数用于检查线程的消息队列,有5个参数,第一个是接收消息信息的MSG结构指针,此处定义msg就是MSG结构的,用于接收消息,要求用指针所以要用&符号。第二三四参数设为空即可。最后一个表示peek后,是否将消息从对列中删除。
6 GetMessage用于从消息队列中取消息,此函数可取得与指定窗口联系的消息和由PostThreadMesssge寄送的线程消息。此函数接收一定范围的消息值。GetMessage不接收属于其他线程或应用程序的消息。获取消息成功后,线程将从消息队列中删除该消息。函数会一直等待直到有消息到来才有返回值。第一个参数既是指向MSG结构的指针,该结构从线程的消息队列里接收消息信息。
7 CreateEvent用于创建一个事件,第二个参数说明这个事件是用手动还是自动复原,如果是TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。如果设置为FALSE,当事件被一个等待线程释放以后,系统将会自动将事件状态复原为无信号状态。第三个参数是指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。
8 CreateThread用于创建一个线程,第三个参数指向线程函数的指针,形式:@函数名,函
数名称没有限制,但是必须以下列形式声明: DWORD WINAPI ThreadProc (LPVOID pParam) ,格式不正确将无法调用成功。最后一个参数是:保存新线程的id。
创建线程的过程用黄底的标号写出 传送消息的过程用红底的标号写出 绿色为最终结果。
正在阅读:
大班美术教案:《有趣的圆形》12-29
结构试验复习题04-05
核心突破专题四 三角函数09-19
《动物常见病防治》2018-2019期末试题及答案04-29
浅谈明星慈善活动 - 图文11-01
爱不曾远离作文400字07-06
《Web程序设计》复习题库及答案02-02
ipad2 英文介绍 - 图文11-02
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 线程
- 创建
- 两个
- thread1
- thread2
- 青藏高原隆升的影响
- 关于增强法律专科学生学习实效性的研究 doc
- 小学品德与社会苏教版三年级下册第4课《为你介绍我们的学校》公开课优质课教案比赛讲课获奖教案
- 外贸函电专业术语汉译英答案
- 节能减排知识竞赛复习题(1)
- 电动剃须刀前盖模具设计及其型腔仿真加工
- 局办公室职能职责及分工
- 分化课后题答案
- 统计学课程设计案例调查分析 - 图文
- 试卷类型:A
- 2008学年第二学期期中考试高一英语试卷及答案
- 剑桥少儿英语文本2
- 《社会工作导论》复习资料
- 学习能力训练指导(1-2年级听觉版)
- 审计10章试题库内容
- 新经济产业中战略模式探究
- 集中供暖改造工程项目可行性研究报告
- 2012年度大禹水利科学技术奖励公示 - 图文
- 弧齿锥齿轮几何参数设计分解 - 图文
- 基于三菱PLC的交通灯设计