//一个简单的多线程例子========================================================================================
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <process.h>//进程。
//定义一个被多线程执行的函数,这个函数,的返回值必须是void,参数必须是 void *。如果要是参数过多,用结构体。
void run(void* p){
//把传进来的参数转化为实际的类型。
int* i = (int*)p;
//定义的一个存放字符的容器,字符数组。
char c[100] = { 0 };
//把汉字和数字存放到字符数组中。
sprintf(c,"内容是%d",*i);
//对话框提示。
MessageBox(0, c, "标题", 0);
}
int main(void){
int is[5];
for (size_t i = 0; i < 5; i++)
{
*(is + i) = i;
//开启子线程。
//第一个参数是调用的函数名字,
//第二个参数是一些默认值,暂时设置为0,
//第三个参数是函数的参数。
_beginthread(run, 0, is+i);
}
MessageBox(0,"主线程", "标题", 0);
system("pause");
return 0;
}
//第二个多线程的例子============================================================
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <process.h>//进程。
#include <time.h>
void suiJiShu(int* , int );
void printArr(int*, int);
int tag = 0;
int index = -1;
struct MyStruct
{
int threadIndex;
//存放原来的数组。
int *arr;
//数组开始查找的位置。
int begin;
//找多少个元素。
int count;
int find;
//是否找到的标记。0,为没有找到。1,为找到。
int *tag;
int *index;
};
//void find(void *);
void find(void *p){
struct MyStruct *ms = (struct MyStruct *)p;
for (size_t i = 0; i < ms->count; i++)
{
if (*(ms->tag) == 1){
printf("\n结果出来了,线程%d没有找到。", ms->threadIndex);
return;
}
if (ms->arr[ms->begin + i] == ms->find){
*(ms->tag) = 1;
*(ms->index) = ms->begin + i;
printf("\n结果出来了,线程%d找到了。索引是%d" ,ms->threadIndex, ms->begin + i);
return;
}
Sleep(1);
}
printf("\n线程%d over", ms->threadIndex);
}
int main(){
int is[100] = {0};
suiJiShu(is, 100);
printArr(is, 100);
printf("\n开始查找\n");
struct MyStruct ms[10];
for (size_t i = 0; i < 10; i++)
{
ms[i].threadIndex = i;
ms[i].arr = is;
ms[i].begin = i * 10;
ms[i].count = 10;
ms[i].tag = &tag;
ms[i].index = &index;
ms[i].find = 100;
_beginthread(find, 0, ms + i);
printf("\n线程%d开启",i);
}
printf("%s","\nhellor word!!!\n");
system("pause");
return 0;
}
//给数组is赋值。
void suiJiShu(int* is ,int count){
//随机数
time_t time1;
srand((unsigned int)time(&time1));
for (size_t i = 0; i < count; i++)
{
is[i] = rand() % 500;
}
}
void printArr(int* is, int count){
for (size_t i = 0; i < count; i++)
{
if (i % 10 == 0){
printf("\n");
}
printf("%d\t",is[i]);
}
}