多线程应用(三)
2015-07-31 09:38
176 查看
#include <stdlib.h> #include <stdio.h> #include <Windows.h> #include <process.h>
int find = 0;//0表示没有找到 int *addr_find = NULL; typedef struct { int* pStart;//指向要查找的数组首地址 int length;//查找区域的空间大小 int *pFind;//修改标识,当找到后更新为1 int data;//要查找的元素 int number;// 记录当前线程的编号 int **addr;//存储找到的元素地址的地址 } MyStruct; void findData(void *pStruct) { MyStruct *s = (MyStruct*)pStruct; for (int *p = s->pStart; p < s->pStart + 100;p++) { Sleep(10); if (*(s->pFind) != 0) { printf("线程%d没有找到,被抢先一步了\n", s->number); return; } if (s->data == *p) { find = 1; *(s->addr) = p;//二级指针 间接修改addr_find值 printf("第%d个线程找到了元素%d,地址是%p\n", s->number, s->data, *(s->addr)); return; } } printf("第%d个线程没有找到%d\n", s->number,s->data); } void main() { int a[1000] ; for (int i = 0; i <1000; i++) { a[i] = i; } MyStruct s[10];//循环外面定义,如果结构体包含字符串元素,则最好定义在循环内部 for (int j = 0; j < 10;j++) { s[j].pStart = a + 100 * j; s[j].length = 100; s[j].number = j; s[j].data = 888; s[j].pFind = &find; s[j].addr = &addr_find; _beginthread(findData, 0, &s[j]); Sleep(30);//有些机器需要缓冲时间 } Sleep(10000); //有些机器需要缓冲时间 if (find != 0) { printf("找到元素的地址是%p 数据内容是%d\n", addr_find, *addr_find); } system("pause"); }
相关文章推荐
- 【转】WPF 单选的Checkbox
- centos6.4搭建knowlededgeroot-1.0.4知识库平台
- 用TextKit实现图文混排(转载)
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
- 统计难题---hdu1251字典树模板
- 前端体系图收藏
- Axis2创建WebService实例
- binlog 相关参数
- 【暑期基础】A HDU 2000 ASCII码排序
- zoj 3228 Searching the String(trie)
- Java包行业命名规则习惯
- Properties vs. instance variables(ios objective-c)
- 游戏客户端嵌入页面出白边bug
- 如何给一件商品定价?
- 去掉cell分割线
- 获取Windows10工具升级Win10安装失败的解决方法
- 利用adb安装和卸载android APK
- 通过document.getElementsByName来实现 复选框的全选,全部选,反选
- monitoring tomcat with zabbix
- win8升级win10启动系统蓝屏该怎么办?