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) ...
随机推荐
- hdu_5677_ztr loves substring(回文+二维多重背包)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5677 题意:给你N个串,问能否选出小于K个回文字符串使得选出的字符串的长度之和为L. 题解:很容易想到 ...
- 模拟。。。 Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C
题目大意:给你一个n*m的矩阵,再给你一个小球,从(0,0)以sqrt(2)/s的速度向右上角出发,遇到边框会反弹,遇到角落就直接停止,给你一些点,问小球第一次经过这些点所需要的时间. 思路:模拟一下 ...
- 自定义cell,根据数据源,要对cell的布局进行调整,没有实现调整的相应效果
自定义cell,用于两种显示情况,首次进来A种情况(主材页面),正确显示,然后切换B种情况(辅材情况),可以正确显示,但是当再次切换回A种情况(主材情况)的时候,主材cell不能正常显示了,遗留的B中 ...
- RS232 DB9 公头 母头 串口引脚定义
转自:http://hi.baidu.com/zhy_myspace/item/ad1ab0f112a4da1ad7ff8cf9 DB9 公头 母头 串口引脚定义 1.RS-232端(DB9母头/孔型 ...
- Mycat 依赖包解读
1.curator - zookeeper开源客户端框架 2.dom4j - xml解析包 3.druid - 阿里巴巴推出的国产数据库连接池,同时具备监控功能,性能优于JDBC和C3P0 4.ehc ...
- (UE4) 动态加载DLL
目前还没有实现,实在搞不懂为什么,大概代码如下: //------------------------------------------------------------------------- ...
- 两种方法将oracle数据库中的一张表的数据导入到另外一个oracle数据库中
oracle数据库实现一张表的数据导入到另外一个数据库的表中的方法有很多,在这介绍两个. 第一种,把oracle查询的数据导出为sql文件,执行sql文件里的insert语句,如下: 第一步,导出sq ...
- cakephp 复杂查询
$now = time(); $this->CardTypeInfos->recursive = -1; $conditions = [ 'seller_id'=>SELLER_ID ...
- js入门实例
<!DOCTYPE html> <html> <body> <h1>My First Web Page</h1> <p>My F ...
- HDU - 2502 Subway
题目链接:http://poj.org/problem?id=2502 分析: 告诉一些地铁线路,从起点到终点,中途可以步行,可以坐地铁,找一条最短的路 主要是把图建立好,然后直接dijkstra或者 ...