linux创建线程和windows创建线程对比

来源:互联网 发布:网络运营学校 编辑:程序博客网 时间:2024/06/08 17:42

linux:

 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<pthread.h> 4  5 /* 声明结构体 */ 6 struct member 7 { 8     int num; 9     char *name;10 };     11 12 /* 定义线程pthread */13 static void * pthread(void *arg)       14 {15     struct member *temp;16     17     /* 线程pthread开始运行 */18     printf("pthread start!\n");19     20     /* 令主线程继续执行 */21     sleep(2);22     23     /* 打印传入参数 */24     temp = (struct member *)arg;      25     printf("member->num:%d\n",temp->num);26     printf("member->name:%s\n",temp->name);27     28     return NULL;29 }30 31 /* main函数 */32 int main(int agrc,char* argv[])33 {34     pthread_t tidp;35     struct member *b;36 37     /* 为结构体变量b赋值 */38     b = (struct member *)malloc(sizeof(struct member));           39     b->num=1;40     b->name="mlq";              41 42     /* 创建线程pthread */43     if ((pthread_create(&tidp, NULL, pthread, (void*)b)) == -1)44     {45         printf("create error!\n");46         return 1;47     }48     49     /* 令线程pthread先运行 */50     sleep(1);51     52     /* 线程pthread睡眠2s,此时main可以先执行 */53     printf("mian continue!\n");54     55     /* 等待线程pthread释放 */56     if (pthread_join(tidp, NULL))                  57     {58         printf("thread is not exit...\n");59         return -2;60     }61     62     return 0;63 }


windows:

#include <windows.h>
#include <strsafe.h>//win2003SDK必须安装 要不无此头文件。此文件是为了实现StringCchPrintf,StringCchLength。
#define MAX_THREADS    3
#define BUF_SIZE    255
typedef struct _MyData{
int val1;
int val2;
}MYDATA,*PMYDATA;
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
    HANDLE hStdout;
    PMYDATA pData;
    TCHAR msgBuf[BUF_SIZE];
    size_tcchStringSize;
    DWORD dwChars;
    hStdout=GetStdHandle(STD_OUTPUT_HANDLE);
    if(hStdout==INVALID_HANDLE_VALUE)
    return 1;
    //Cast the parameter to the correct data type.
    pData=(PMYDATA)lpParam;
    //Print the parameter values using thread-safe functions.
    StringCchPrintf(msgBuf,BUF_SIZE,TEXT("Parameters=%d,%d\n"),
    pData->val1,pData->val2);
    StringCchLength(msgBuf,BUF_SIZE,&cchStringSize);
    WriteConsole(hStdout,msgBuf,cchStringSize,&dwChars,NULL);
    //Free the memory allocated by the caller for the thread
    //data structure.
    HeapFree(GetProcessHeap(),0,pData);
    return 0;
}
void main()
{
    PMYDATA pData;
    DWORD dwThreadId[MAX_THREADS];
    HANDLE hThread[MAX_THREADS];
    int i;
    //Create MAX_THREADS worker threads.
    for(i = 0; i < MAX_THREADS; i++)
    {
        //Allocate memory for thread data.
        pData=(PMYDATA)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,
        sizeof(MYDATA));
        if(pData==NULL)
        ExitProcess(2);
        //Generate unique data for each thread.
        pData->val1=i;
        pData->val2=i+100;
        hThread[i]=CreateThread(
        NULL,//default security attributes
        0,//use default stack size
        ThreadProc,//thread function
        pData,//argument to thread function
        0,//use default creation flags
        &dwThreadId[i]);//returns the thread identifier
        //Check there turn value for success.
        if(hThread[i]==NULL)
        {
            ExitProcess(i);
        }
    }
    //Wait until all threads have terminated.
    WaitForMultipleObjects(MAX_THREADS,hThread,TRUE,INFINITE);
    //Close all thread handle supon completion.
    for(i=0;i<MAX_THREADS;i++)
    {
        CloseHandle(hThread[i]);
    }    
}

http://blog.csdn.net/cbnotes/article/details/8277180/

原创粉丝点击