多线程~~简单的线程创建,C语言实现
2015-04-24 21:30
323 查看
线程,是计算机中最小的执行单元。通常,在window应用程序运行时,操作系统都会为其自动创建一个线程,即主线程。通过主线程,可以创建多个线程或进程。
使用多线程,可以提高程序的执行效率。
线程创建函数CreateThread(),属于API函数;
函数原型为:
lpThreadAttributes是一个指向结构体SECURITY_ATTRIBUTES的指针,表示指定新建线程的安全属性。该参数可以设置为NULL,表示创建线程时使用默认的安全属性。
dwStackSize指定线程初始化时地址空间的大小。如果这个参数指定为0,那么新创建的线程的地址空间大小与调用该函数的线程地址空间大小一样。
lpStackAddress将指定该线程的线程函数的地址。当线程创建成功后,新建线程将调用该线程函数执行某个功能。
lpParameter表示将要传递给新建线程的命令行参数,新建线程可以根据该命令参数的不同而执行不同的功能。
dwCreationFlags用于指定新建线程创建后是否立即执行。有两个状态值,一个是CREATE_SUSPENDED,作用是创建线程成功后暂停运行;另一个是0,作用是创建线程成功后立即运行。
lpThreadId表示新建线程的ID号,一般设置为NULL。
下面是一个简单的线程创建例子:
结果是乱的,没有实现线程同步,线程同步的将会在以后写
下面是运行结果样例:
使用多线程,可以提高程序的执行效率。
线程创建函数CreateThread(),属于API函数;
函数原型为:
HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId );参数含义:
lpThreadAttributes是一个指向结构体SECURITY_ATTRIBUTES的指针,表示指定新建线程的安全属性。该参数可以设置为NULL,表示创建线程时使用默认的安全属性。
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语言 多线程的简单实现 线程锁
- 用简单的C语言实现多任务轮流切换(模拟操作系统线程机制)【转】
- C语言实现的创建多线程
- 多线程的使用技巧:使用匿名内部类来实现一个线程的创建
- C#构建多线程应用程序(1) —— 使用委托来自动创建次线程以实现异步方法的调用
- java多线程 -- 创建线程的第三者方式 实现Callable接口
- 黑马程序员_笔记_多线程(创建线程的第二种方式:实现Runable接口)
- Java多线程-一个简单的线程,实现挂起和恢复的功能
- 多线程(一)——通过实现Runnable接口创建线程
- .Net最简单的创建多线程主线程等待所有线程执行完成的例子
- 多线程之创建线程的方式之一:实现Callable接口(三)
- Java多线程-一个简单的线程,实现挂起和恢复的功能
- Java多线程-一个简单的线程,实现挂起和恢复的功能
- C语言-简单创建线程之pthread.h
- Java编程之多线程死锁与线程间通信简单实现代码
- [WPF] Felix 的线程学习笔记(二)——从WPF入手,实现简单的多线程
- 二叉树的创建、前序中序后序递归遍历与非递归遍历、层序遍历以及二叉树简单应用的C语言实现
- 黑马程序员——java第十一、十二天:多线程(创建线程1-2、多线程同步代码、实现Runnable接口、安全死锁)
- Java【多线程知识总结(4)】通过实现Runnable接口创建线程