asio(二)、异步定时器

该教程介绍了如何利用ASIO库中的异步定时器功能。通过创建一个io_context对象和steady_timer,然后调用async_wait方法并传入一个完成处理程序(print函数),在计时器超时时执行该处理程序。io_context的run方法保证了处理程序在适当的时候被调用,并且只有当有工作需要处理时才会继续运行。
摘要由CSDN通过智能技术生成

官网教程:https://think-async.com/Asio/asio-1.26.0/doc/asio/tutorial/tuttimer2.html

asio的异步定时器功能

#include <iostream>
#include <asio.hpp>

使用asio的异步功能意味着提供一个完成令牌,该令牌决定异步操作完成时如何将结果传递给完成处理程序。在这个程序中,我们定义了一个名为print的函数,当异步等待结束时调用它。

void print(const asio::error_code& /*e*/)
{
	std::cout << "Hello, world!" << std::endl;
}

int main()
{
	asio::io_context io;
	asio::steady_timer t(io, asio::chrono::seconds(5));	

接下来,我们不再像教程Timer.1中那样进行阻塞等待,而是调用steady_Timer::async_wait()函数来执行异步等待。当调用这个函数时,我们传递上面定义的打印函数。

	t.async_wait(&print);

最后,我们必须在io_context对象上调用io_context::run()成员函数。

asio库保证只从当前调用io_context::run()的线程调用完成处理程序。因此,除非调用io_context::run()函数,否则将永远不会调用异步等待完成的完成处理程序。

io_context::run()函数也将在还有“工作”要做的时候继续运行。在本例中,工作是对计时器的异步等待,因此在计时器到期并且返回完成处理程序之前,调用不会返回。

在调用io_context::run()之前,请记住给io_context一些工作要做。例如,如果我们省略了上面对steady_timer::async_wait()的调用,那么io_context将没有任何工作要做,因此io_context::run()将立即返回。

	io.run();
	return 0;
}
#include <iostream>
#include <asio.hpp>

void print(const asio::error_code& /*e*/)
{
	std::cout << "Hello, world!" << std::endl;
}

int main()
{
	asio::io_context io;

	asio::steady_timer t(io, asio::chrono::seconds(5));
	t.async_wait(&print);

	io.run();

	return 0;
}
ASIO 2.3 SDK Contents --------------------- readme.txt - this file changes.txt - contains change information between SDK releases ASIO SDK 2.3.pdf - ASIO SDK 2.3 specification Steinberg ASIO Licensing Agreement.pdf - Licencing Agreement common: asio.h - ASIO C definition iasiodrv.h - interface definition for the ASIO driver class asio.cpp - asio host interface (not used on Mac) asiodrvr.h asiodrvr.cpp - ASIO driver class base definition combase.h combase.cpp - COM base definitions (PC only) dllentry.cpp - DLL functions (PC only) register.cpp - driver self registration functionality wxdebug.h debugmessage.cpp - some debugging help host: asiodrivers.h asiodrivers.cpp - ASIO driver managment (enumeration and instantiation) ASIOConvertSamples.h ASIOConvertSamples.cpp - sample data format conversion class ginclude.h - platform specific definitions host/pc: asiolist.h asiolist.cpp - instantiates an ASIO driver via the COM model host/sample: hostsample.cpp - a simple console app which shows ASIO hosting hostsample.dsp - MSVC++ 5.0 project hostsample.vcproj - Visual Studio 2005 project (32 and 64 bit targets) driver/asiosample: asiosmpl.h asiosmpl.cpp - ASIO 2.0 sample driver wintimer.cpp - bufferSwitch() wakeup thread (Windows) asiosample.def - Windows DLL module export definition mactimer.cpp - bufferSwitch() wakeup thread (Macintosh) macnanosecs.cpp - Macintosh system reference time makesamp.cpp - Macintosh driver object instantiation driver/asiosample/asiosample: asiosample.dsp - MSVC++ 5.0 project asiosample.vcproj - Visual Studio 2005 project (32 and 64 bit targets)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值