您的位置:首页 > 编程语言 > C语言/C++

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

2017-08-14 21:28 393 查看
原文地址:多线程~~简单的线程创建,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;
}


结果是乱的,没有实现线程同步,线程同步的将会在以后写

下面是运行结果样例:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐