多线程编程学习笔记1时间

时间

c语言如何处理时间

c语言如何处理时间:time.h
long t0 = time(NULL) ;//获取unix时间(从1970年1月1日到当前时经过的秒数
sleep(3);//让程序休眠3秒
long t1 = t0 +3; //当前时间的三秒后
usleep(3000000);//让程序休眠3000000微秒(3秒)
C语言原始的API,没有类型区分,导致很容易弄错单位,混淆时间点和时间段。
比如t0* 3,乘法对时间点而言根本是个无意义的计算,然而C语言把他们看做一样的long类型,所以区分不开。

C++11引入的时间标准库:std::chrono

利用C++强类型的特点,明确区分时间点与时间段,明确区分不同的时间单位。
时间点类型: chrono::steady_clock::time_point 等
时间段类型: chrono:milliseconds,chrono:.seconds,chrono::minutes 等方便的运算符重载:时间点+时间段=时间点,时间点-时间点=时间段
auto t0 = chrono::steady_clock::now();
获取当前时间点
auto t1 = t0 + chrono::seconds(30);
当前时间点的30秒后
auto dt = t1 - t0;
获取两个时间点的差(时间段)
int64_t sec = chrono:.duration_cast<chrono::seconds>(dt).count();时间差的秒数

时间段:作为double类型

// An highlighted block
#include <iostream>
#include <thread>
#include <chrono>
int main()
{
	auto t0 = std::chrono::steady_clock::now();
	for (volatile int i = 0; i < 10000000; i++);
	auto t1 = std::chrono::steady_clock::now();
	auto dt = t1 - t0;
	using double_ms = std::chrono::duration<double, std::milli>;
	double ms = std::chrono::duration_cast<double_ms>(dt).count();
	std::cout << "time elapsed: " << ms << " ms" << std::endl;
	system("pause");
	return 0;
}

duration_cast可以在任意的duration类型之间转换duration<T,R>表示用T类型表示,且时间单位是R
R省略不写就是秒,std::milli就是毫秒,std::micro就是微秒seconds是duration<int64_t>的类型别名
milliseconds是duration<int64_t, std:milli>的类型别名
这里我们创建了double_ms作为duration<double, std:milli>的别名

跨平台的sleep: std:this_thread:.sleep_for

std::this_thread::sleep_for(std::chrono::microseconds(400));

可以用std: this_thread:sleep_for替代Unix类操作系统专有的的usleep。他可以让当前线程休眠一段时间,然后继续。而且单位也可以自己指定,比如这里是milliseconds表示毫秒,也可以换成microseconds表示微秒,seconds表示秒,chrono 的强类型让单位选择更自由。

std::this_thread::sleep_for(std::chrono::microseconds(400));
auto t = std::chrono::steady_clock::now() + std::chrono::microseconds(400);
std::this_thread::sleep_until(t);

除了接受一个时间段的sleep_for,还有接受一个时间点的sleep_until,表示让当前线程休眠直到某个时间点。

进程与线程

  • 进程是一个应用程序被操作系统拉起来加载到内存之后从开始执行到执行结束的这样一个过程。简单来说,进程是程序(应用程序,可执行文件)的一次执行。比如双击打并一个桌面应用软件就是开启了一个进程。
  • 线程是进程中的一个实体,是被系统独立分配和调度的基本单位。也有说,线程是CPU可执行调度的最小单位。也就是说,进程本身并不能获取CPU时间,只有它的线程才可以。。从属关系:进程>线程。一个进程可以拥有多个线程。
  • 每个线程共享同样的内存空间,开销比较小。
  • 每个进程拥有独立的内存空间,因此开销更大。。对于高性能并行计算,更好的是多线程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值