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:// ...
随机推荐
- UESTC_小panpan学图论 2015 UESTC Training for Graph Theory<Problem J>
J - 小panpan学图论 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) S ...
- 第07讲- Android项目的打包apk
第07讲Android项目的打包apk 方法一:在工作目录bin文件夹下有一个与项目同名的apk文件 (最懒惰的方式,不推荐,不安全,不利于版本更新,只有在开发模式时使用) 方法二:使用key方式 签 ...
- GridView视图
本文实现如下效果 Test_Grid.java public class Test_Grid extends Activity { private GridView gridview; private ...
- add.fun.php
<?php header("Content-type: text/html; charset=utf-8"); function add($min_int,$max_int) ...
- C#Http编程
c# 模拟 网页实现12306登陆.自动刷票.自动抢票完全篇(转) 这一篇文章,我将从头到尾教大家使用c#模拟网页面登陆12306网站,自动刷票,选择订票人,到最后一步提交订单.研究过HTTP协议的童 ...
- [Cycle.js] From toy DOM Driver to real DOM Driver
This lessons shows how we are able to easily swap our toy DOM Driver with the actual Cycle.js DOM Dr ...
- SQL-SERVER2008登录错误233
问题 : SQL Server2008在本地使用Windows身份验证登录或是使用SQL Server身份认证登录时报错:已成功与服务器建立连接,但是在登录过程中发生错取.(provider:共享内存 ...
- Android Canvas设置绘画时重叠部分的处理模式【含效果图】
在Android的PorterDuff.Mode类中列举了他们制定的规则: android.graphics.PorterDuff.Mode.SRC:只绘制源图像 android.graphics.P ...
- mysql设置字体
如果在linux下重启mysql服务的时候出现Job failed to start,在window下重启失败,这是因为你安装了高版本的mysql(mysql5.5以上),在高版本对字符编码方式修改的 ...
- $.getJson()和$.ajax()同步处理
一.前言 为什么需要用到同步,因为有时候我们给一个提交按钮注册提交表单数据的时候,在提交动作之前会进行一系列的异步ajax请求操作,但是页面js代码会按顺序从上往下面执行,如果你在这过程中进行了异步操 ...