您的位置:首页 > 其它

多线程应用(三)

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");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: