多线程~~简单的线程创建,C语言实现

来源:互联网 发布:泉州用友软件 编辑:程序博客网 时间:2024/04/29 16:50

原文地址:多线程~~简单的线程创建,C语言实现 - XD - CSDN博客

  http://m.blog.csdn.net/qq_25425023/article/details/45251771




多线程~~简单的线程创建,C语言实现



  线程,是计算机中最小的执行单元。通常,在window应用程序运行时,操作系统都会为其自动创建一个线程,即主线程。通过主

 线程,可以创建多个线程或进程。

  使用多线程,可以提高程序的执行效率。

  线程创建函数CreateThread(),属于API函数;

  函数原型为:

HANDLE CreateThread(    LPSECURITY_ATTRIBUTES lpThreadAttributes,   DWORD dwStackSize,                          LPTHREAD_START_ROUTINE lpStartAddress,     LPVOID lpParameter,                  DWORD dwCreationFlags,                   LPDWORD lpThreadId   );
参数含义:

lpThreadAttributes是一个指向结构体SECURITY_ATTRIBUTES的指针,表示指定新建线程的安全属性。该参数可以设置为NUL

L,表示创建线程时使用默认的安全属性。


dwStackSize指定线程初始化时地址空间的大小。如果这个参数指定为0,那么新创建的线程的地址空间大小与调用该函数的线程地

址空间大小一样。


lpStackAddress将指定该线程的线程函数的地址。当线程创建成功后,新建线程将调用该线程函数执行某个功能。

lpParameter表示将要传递给新建线程的命令行参数,新建线程可以根据该命令参数的不同而执行不同的功能。

dwCreationFlags用于指定新建线程创建后是否立即执行。有两个状态值,一个是CREATE_SUSPENDED,作用是创建线程成功

后暂停运行;另一个是0,作用是创建线程成功后立即运行。

lpThreadId表示新建线程的ID号,一般设置为NULL。


下面是一个简单的线程创建例子:

#include <stdio.h>#include <windows.h>DWORD WINAPI myfun1(LPVOID lpParameter);                   //声明线程函数DWORD WINAPI myfun2(LPVOID lpParameter);int main(){ HANDLE h1, h2;                                         //定义句柄变量h1 = ::CreateThread(NULL, 0, myfun1, NULL, 0, NULL);   //创建线程printf("线程1开始运行!\r\n");h2 = ::CreateThread(NULL, 0, myfun2, NULL, 0, NULL);printf("线程2开始运行!\r\n");::CloseHandle(h1);                                     //关闭线程句柄对象::CloseHandle(h2);if(getchar() == 'q'){return 0;}else ::Sleep(1000);return 0;}DWORD WINAPI myfun1(LPVOID lpParameter)                     //分别实现线程函数{printf("线程1正在运行!\r\n");return 0;}DWORD WINAPI myfun2(LPVOID lpParameter){printf("线程2正在运行!\r\n");return 0;}


结果是乱的,没有实现线程同步,线程同步的将会在以后写
下面是运行结果样例:


原创粉丝点击