C——多线程
//一个简单的多线程例子======================================================================================== #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]); } }