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]);
    }
}

 

posted @ 2015-12-01 09:15  戴帽的和尚  阅读(132)  评论(0)    收藏  举报