多线程~~简单的线程创建,C语言实现
2017-08-14 21:28
393 查看
原文地址:多线程~~简单的线程创建,C语言实现 - XD - CSDN博客
http://m.blog.csdn.net/qq_25425023/article/details/45251771
线程,是计算机中最小的执行单元。通常,在window应用程序运行时,操作系统都会为其自动创建一个线程,即主线程。通过主
线程,可以创建多个线程或进程。
使用多线程,可以提高程序的执行效率。
线程创建函数CreateThread(),属于API函数;
函数原型为:
lpThreadAttributes是一个指向结构体SECURITY_ATTRIBUTES的指针,表示指定新建线程的安全属性。该参数可以设置为NUL
L,表示创建线程时使用默认的安全属性。
dwStackSize指定线程初始化时地址空间的大小。如果这个参数指定为0,那么新创建的线程的地址空间大小与调用该函数的线程地
址空间大小一样。
lpStackAddress将指定该线程的线程函数的地址。当线程创建成功后,新建线程将调用该线程函数执行某个功能。
lpParameter表示将要传递给新建线程的命令行参数,新建线程可以根据该命令参数的不同而执行不同的功能。
dwCreationFlags用于指定新建线程创建后是否立即执行。有两个状态值,一个是CREATE_SUSPENDED,作用是创建线程成功
后暂停运行;另一个是0,作用是创建线程成功后立即运行。
lpThreadId表示新建线程的ID号,一般设置为NULL。
下面是一个简单的线程创建例子:
结果是乱的,没有实现线程同步,线程同步的将会在以后写
下面是运行结果样例:
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; }
结果是乱的,没有实现线程同步,线程同步的将会在以后写
下面是运行结果样例:
相关文章推荐
- 多线程~~简单的线程创建,C语言实现
- c语言 多线程的简单实现 线程锁
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- 多线程(一)——通过实现Runnable接口创建线程
- C语言-简单创建线程之pthread.h
- C#构建多线程应用程序(1) —— 使用委托来自动创建次线程以实现异步方法的调用
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- Java多线程-一个简单的线程,实现挂起和恢复的功能
- linux之TCP/IP创建线程实现简单聊天(2)
- 黑马程序员——java第十一、十二天:多线程(创建线程1-2、多线程同步代码、实现Runnable接口、安全死锁)
- Java多线程-一个简单的线程,实现挂起和恢复的功能
- 1多线程的概述2多线程(创建多个线程实例,并启动多个线程)的实现方式,main主方法是单线程的4多线程的实现方式5多线程模拟火车站售票出现问题7线程的声明周期
- java多线程-售票例子-创建线程-实现Runnable接口
- Java多线程:创建线程的两种实现方式
- 多线程程序设计之创建线程(Windows下C++实现)
- 多线程之创建线程的方式之一:实现Callable接口
- .Net最简单的创建多线程主线程等待所有线程执行完成的例子
- Windows线程(二)最简单的多线程创建
- Linux下C语言实现的简单使用线程向FIFO里写入与读取数据的例子
- 黑马程序员——多线程--线程的创建方式和线程安全的简单介绍