C++多线程一
CreateThread()创建一个新的线程。
ExitThread()正常的结束一个线程的执行。
CloseHandle()关闭一个线程的句柄。
CreateThread()函数原型如下:
HANDLE WINAPI CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,//线程安全属性,(NULL表示不能被子进程继承)
SIZE_T dwStackSize, //线程堆栈初始化大小,默认为0
LPTHREAD_START_ROUTINE lpStartAddress, //线程函数
LPVOID lpParameter, //线程参数
DWORD dwCreationFlags,//创建方式(0:表示立即执行)
LPDWORD lpThreadId //线程标识符(该指针存储线程创建后返回的线程标识符)
);
线程函数的格式必须:
DWORD WINAPI threadName(LPVOID lpParamter);
// lpParamter为CreateThread()传递给线程函数的参数,函数返回值为函数是否正常结束的标志。
句柄对线程对象有完全的访问权,句柄可以被子进程继承。线程句柄在其被关闭前一直是有效的,既是句柄所代表的线程已全部被终止,所以必须调用CloseHandle()显式的关闭一个句柄。
#include <iostream>
#include <windows.h> bool repeat=true; DWORD WINAPI mythread1(LPVOID lpParamter)
{
while(repeat)
{
std::cout<<"How are you?"<<std::endl;
Sleep();
}
DWORD exitCode;
ExitThread(exitCode);
return ;
} DWORD WINAPI mythread2(LPVOID lpParamter)
{
while(repeat)
{
std::cout<<"very well!"<<std::endl;
Sleep();
}
DWORD exitCode;
::ExitThread(exitCode);
return ;
} DWORD WINAPI killthread(LPVOID lpParamter)
{
repeat=false;
return ;
} int main()
{
HANDLE handle1,handle2,handle3;
DWORD dw1,dw2,dw3;
handle1=::CreateThread(NULL,,mythread1,NULL,,&dw1);
if(handle1==NULL)
{
std::cout<<"create thread1 failed!"<<std::endl;
return -;
} handle2=::CreateThread(NULL,,mythread2,NULL,,&dw2);
if(handle2==NULL)
{
std::cout<<"create thread2 failed!"<<std::endl;
return -;
} ::Sleep();
handle3=::CreateThread(NULL,,killthread,NULL,,&dw3);
if(handle3==NULL)
{
std::cout<<"create thread3 failed !"<<std::endl;
return -;
} ::CloseHandle(mythread1);
::CloseHandle(mythread2);
::CloseHandle(killthread); return ;
}
C++多线程一的更多相关文章
- C#夯实基础之多线程一:初识多线程
一. 烧水沏茶问题 在小学四年级有一个烧水沏茶问题,可以作为我们今天讨论话题的引子: 客人来了,要烧一壶茶,但是烧水需要5分钟,洗水壶需要1分钟,洗茶杯需要2分钟,接水需要1分钟,找茶叶需 ...
- c#中的线程一
一.使用线程的理由 1.可以使用线程将代码同其他代码隔离,提高应用程序的可靠性. 2.可以使用线程来简化编码. 3.可以使用线程来实现并发执行 二.基本知识 1.进程与线程:进程作为操作系统执行程序的 ...
- JAVA多线程一
介绍 线程是操作系统的最小单位,一个进程可以创建多个线程. 线程有五种状态,分别是新建.就绪.运行.阻塞.死亡状态. 多线程可以提高执行效率,但是如果单线程可以完成的任务,使用多线程反而会增加不必要的 ...
- iOS 之 多线程一
iOS中实现多线程的技术方案 pthread 实现多线程操作 代码实现: void * run(void *param) { for (NSInteger i = 0; i < 1000; ...
- java学习多线程之创建多线程一
现在我们有这么一个需求,就是在主线程在运行的同时,我们想做其他的任务,这个时候我们就用到了多线程.那么如何创建多线程,我们知道在系统当中qq的多线程创建是由操作系统来完成的,那么如果我们想在java当 ...
- java 线程一
java基础学习总结--线程(一) 一.线程的基本概念 线程理解:线程是一个程序里面不同的执行路径 每一个分支都叫做一个线程,main()叫做主分支,也叫主线程. 程只是一个静态的概念,机器上的一个. ...
- python并发编程之多线程一
一,什么是线程 线程也被称为轻量进程计算机科学术语,指运行中的程序的调度单位. 线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程.线程不拥有系统资源,只有运行必须的一些数据结构: ...
- (三十)java多线程一
我们通常在电脑中打开的应用称作进程,一个应用就是一个进程,而一个进程里边一般包含多个线程. 系统要为每一个进程分配独立的内存空间,而进程里的多个线程共用这些内存. 我们通常所写的main方法就是一个线 ...
- 深入java多线程一
涉及到 1.线程的启动(start) 2.线程的暂停(suspend()和resume()) 3.线程的停止(interrupt与异常停止,interrupt与睡眠中停止,stop(),return) ...
随机推荐
- js 时间
<html> <head> <meta charset="utf-8" /> <title></title> <s ...
- lldpcli 常用命令
1.查看周围的邻居列表 root@hbg:/# lldpcli show neighbors------------------------------------------------------ ...
- Ubuntu14.04+cuda 7.5+cudnn_v4+tensorflow安装
系统环境:Ubuntu14.04 64位.Windows7 64位 双系统 CUDA 版本: 7.5 总结一下,我的安装建议是: 一定要下一份CUDA官方的安装文档,按照它的步骤一步步慢慢来,不可偷懒 ...
- php:二进制处理
直接上代码 <?php #字符串 #php中字符串就是二进制,不用特别转化 #方法1:直接把字符串当成二进制 $c = "ccc"; var_dump($c, bin2hex ...
- asp.net textbox控件readonly为true时,后台取值的问题
如题,在后台通过textbox.Text方式取值为空,不论你默认值是否是空,如想要获得,需通过request.Form[""]的方式.
- 对象之function
开头啰嗦几句:程序之中,万事万物皆对象,这就是面向对象编程的核心思想,比如我们的js中的function,其实也是一个对象,是对象就可以有属性,在jq的源码中经常看到类似这样的方法: jQuery.E ...
- tomcat连接数设置
如何加大tomcat连接数 在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有:minProcessors:最小空闲连接线程数,用 ...
- Objective-C语法之NSMutableString字符串的那些事儿
Objective-C语法之字符串那些事 NSMutableString 类 继承NSString类,那么NSString 提供的方法在NSMutableString中基本都可以使用 ...
- ClickOnce发布注意的一些细节
细节1.应用程序启动前检查更新: 步骤:主工程-右键属性-发布(页面)-按“更新”按钮-勾选“应用程序应该检查更新(T)”-选择“应用程序启动前(F)”,如下图: 细节二:ClickOnce发布时&q ...
- xcconfig 文件配置文件 问题
与公司 QA 聊天,已不止一次被吐槽说移动端从开发环境转到生产环境时,还要靠修改代码来配置对应的环境参数.她认为,从 App 转测试之后,就不应该再修改代码,可以把所有的环境配置都整合到配置文件中,这 ...