创建两个线程thread1 和thread2
更新时间:2024-04-08 10:53:01 阅读量: 综合文库 文档下载
创建两个线程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。
创建线程的过程用黄底的标号写出 传送消息的过程用红底的标号写出 绿色为最终结果。
正在阅读:
后赤壁赋断句与翻译10-26
中心学校校长在教育质量提升工作会上的讲话07-07
2018最新试题资料-礼拜二午睡时刻课时跟踪检测(附答案和解释)03-20
华为人力资源管理手册(比较详细,但部分制度为2008之前有过时)01-03
国有企业混合所有制改革的对策研究05-25
高校论文正确的模版(只看格式不看内容!) - 图文05-30
咬破痛苦的蚕茧作文350字06-24
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 线程
- 创建
- 两个
- thread1
- thread2
- 工程质量安全手册(建设部2018.09)
- 2012年度大禹水利科学技术奖励公示 - 图文
- 中国电信相关技术及文件
- 小学数学一年级100以内借位和不借位口算题
- 香港溢达奖学金获奖学生名单- 欢迎访问东华大学
- 多层公共建筑施工图审查要点
- 西方经济学第四章生产理论练习4
- 江苏省镇江中学2015-2016学年高二上学期期中考试英语试题
- 市人防办优秀公务员个人事迹材料-精选模板
- 关于加强青年干警能力培养的实践与思考
- 校报职业规划策划(终稿)
- 2017年中国伺服电缸行业发展研究分析与市场前景预测报告目录
- 标准日本语同步测试卷 - 初级上(含答案)
- 宁波市用电大户名单
- 新课标人教版八年级数学下平行四边形及特殊的平行四边形知识点总
- 2016年输血知识考试试卷及答案B卷
- 湖南省信用社2009年公开招聘员工笔试试卷(业务员)
- 中小学教师校本研修学分认定申请表
- photoshop 图像综合技法
- 夏普数码复印机 - 故障代码及常用维修代码