CreateThread简单那多线程编程
lpThreadAttributes is NULL, the handle cannot be inherited.
see Thread Stack Size.
该参数指定线程堆栈大小,如果该值为零则使用默认的线程堆栈大小
lpStartAddress [in] Pointer to the application-defined function of type LPTHREAD_START_ROUTINE to be executed by the thread and represents the starting address of the thread. For more information on the thread function, see
ThreadProc.
该参数则指定线程函数地址,说白了就是线程函数名
lpParameter [in] Specifies a single parameter value passed to the thread.
该参数为传递给线程函数的参数
dwCreationFlags [in] Specifies additional flags that control the creation of the thread. If the CREATE_SUSPENDED flag is specified, the thread is created in a suspended state, and will not run until the
ResumeThread function is called. If this value is zero, the thread runs immediately after creation. At this time, no other values are supported.
该参数为创建标识,如果为零,那么线程创建后会立即执行,若为CREATE_SUSPENDED则线程创建后则会停止
lpThreadId [out] Pointer to a variable that receives the thread identifier.
该参数为创建线程的线程ID,线程ID就是唯一标识该线程的一个数字
那么现在我们来写一个最简单的多线程例子:
#include <windows.h>
#include "stdio.h" DWORD WINAPI ThreadOne(LPVOID lpParameter)
{
printf("ThreadOne is Runing\n");
Sleep(100);
return 0;
} int main()
{
HANDLE HOne;
printf("***********************vpoet******************\n");
HOne=CreateThread(NULL,0,ThreadOne,NULL,0,NULL);
printf("ThreadOne Begin!\n");
CloseHandle(HOne);
printf("MainThread Over!\n");
return 0;
}
运行结果:
咦!是不是看出来什么问题了,子线程貌似没有运行主线程就退出了,这是怎么回事呢,这说明当开启子线程后还未来得及运行主线程就已经执行完毕,并且return了,那么此时整个程序也就退出,当然也就不会再运行子线程了。那么我们应该怎么控制了,既然子线程来不及执行,那么我就让主线程多运行一会儿等到子线程执行完了之后主线程再退出。是不是很有道理,恩,我也觉得。
那么我们在
printf("MainThread Over!\n");
之前再加入一句代码
Sleep(1000)
让主线程延时1s等待子线程的执行。因为1s足够让子线程执行完毕了所以这次程序就会在子线程运行结束后正常退出了。运行结果如下:
看吧,这下是正常退出了吧。
那么我们就需要知道线程到底是什么时候退出的呢,然后在其退出的时候把该线程句柄Close掉。
If this handle is closed while the wait is still pending, the function's behavior is undefined.
dwMilliseconds is zero, the function tests the object's state and returns immediately. If
dwMilliseconds is INFINITE, the function's time-out interval never elapses.
WaitForSingleObject(HOne,INFINITE);
现在我们再看看运行结果:
版权声明:本文为博主原创文章,未经博主允许不得转载。
CreateThread简单那多线程编程的更多相关文章
- Linux下简单的多线程编程--线程池的实现
/* 写在前面的话: 今天刚“开原”,选择了一篇关于线程池的文件与大家分享,希望能对您学习有所帮助,也希望能与大家共同学习! 选择在这个特殊的时候注册并发文章也是有一些我个人特殊的意义的,看我的id( ...
- 数据结构(逻辑结构,物理结构,特点) C#多线程编程的同步也线程安全 C#多线程编程笔记 String 与 StringBuilder (StringBuffer) 数据结构与算法-初体验(极客专栏)
数据结构(逻辑结构,物理结构,特点) 一.数据的逻辑结构:指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关.逻辑结构包括: 集合 数 ...
- 【转】 Linux下的多线程编程
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/原文链接:http://www.cnblogs.com/gnuhpc/archive/2012/12/07/280 ...
- Linux下的多线程编程
1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的 Unix也支持线程的概念,但是在一个进程(proces ...
- Linux下多线程编程
一.为什么要引入线程? 使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维 ...
- 【转】Linux下的多线程编程
1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的 Unix也支持线程的概念,但是在一个进程(proces ...
- 《转》Linux下的多线程编程
原地址:http://linux.chinaunix.net/doc/program/2001-08-11/642.shtml 1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程 ...
- C#多线程编程的同步也线程安全
前一篇文章记录了简单的多线程编程的几种方式,但是在实际的项目中,也需要等待多线程执行完成之后再执行的方法,这个就叫做多线程的同步,或者,由于多个线程对同一对象的同时操作造成数据错乱,需要线程安全.这篇 ...
- ZT 为什么pthread_cond_t要和pthread_mutex_t同时使用 || pthread/Linux多线程编程
为什么线程同步的时候pthread_cond_t要和pthread_mutex_t同时使用 (2009-10-27 11:07:23) 转载▼ 标签: 杂谈 分类: 计算机 举一个例子(http:// ...
随机推荐
- MongoDB GUI管理工具Mongo VUE
一.前言 现在越来越多的公司开始采用非关系数据库了,并且很多公司的面试都要求面试 者有MongoDB的使用经验,至于非关系数据库与关系型数据库之间的区别大家可以自行百度.但是作为程序员的我们,既然大部 ...
- Inorder Successor in BST 解答
Question Given a binary search tree and a node in it, find the in-order successor of that node in th ...
- Fedora 22(15以上版本)开机自启动脚本
前段时间做了一个网站btdog磁力与btdog电视直播.DHT爬虫需要消耗比较多的资源,原来的服务器不够用了,于是自己使用电脑搭了一台服务器,使用Fedora22系统.在Fedora22中自动写了些开 ...
- 移动支付之智能IC卡与Android手机进行NFC通信
本文来自http://blog.csdn.net/hellogv/ .引用必须注明出处. 眼下常见的智能IC卡执行着JavaCard虚拟机.智能IC卡上能够执行由精简后的Java语言编写 ...
- OCR怎么能离开扫描仪呢?
说起OCR,说来说去就是和各种各样的图片打交道. 所以图片的质量很的关键. 说起图片的质量,不得不提的就是图片的採集. 眼下最靠谱的图像採集来源就是扫描仪. 扫描仪的话就大有说法,最靠谱的扫描仪,扫描 ...
- Dalvik虚拟机的运行过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8914953 在前面一篇文章中,我们分析了Dal ...
- Tomcat 配置篇
Tomcat 配置一.Tomcat 基本介绍 1.关键目录 a) bin 该目录包含了启动.停止和启动其他的脚本,如startup.sh.shutdown.sh等; b) conf 配置文件和一些文档 ...
- docker虚拟化之将容器做成镜像
1,docker ps -a 选择要启动的容器. 2,docker start 容器+ID 启动容器 3,docker exec -i -t 容器ID /bin/bash 进入容器 这里的/ ...
- TreeView中右击直接获取节点的方法
在TreeView中无法直接右击得到一个节点,因为当你选中其中一个右击时(不能是第一个)他会默认跳到第一个. 有时我们要想直接右击得到选中的节点,又时我们又想选中直接右击跳出一个快捷菜单怎么办了! 在 ...
- HttpWebRequest上传文件(Excel等)
//上传代码/// <summary> /// 文件上传 /// </summary> /// <param name="strAddress"> ...