Asio+fiber
以下是一个asio和fiber结合的最简单的小例子。
Asio+fiber+单线程的内存池, 效率无敌,纤程内部,同步等待,写法优美。
// test_timer.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <boost/asio.hpp>
#include < boost/date_time/posix_time/posix_time.hpp>
#include < windows.h>
void *fiber_context[2];
void print(const boost::system::error_code& /*e*/)
{
std::cout << "Hello, world!\n";
}
boost::asio::io_service io;
void WINAPI fiberProc(void *fiber_nbr);
void callback(const boost::system::error_code& /*e*/);
void wait(int second)
{
boost::asio::deadline_timer t(io, boost::posix_time::seconds(second));
t.async_wait(callback);
SwitchToFiber(fiber_context[0]);
};
void callback(const boost::system::error_code& /*e*/)
{
std::cout << "callback!\n";
SwitchToFiber(fiber_context[1]);
};
//纤程内部,同步等待
void WINAPI fiberProc(void *fiber_nbr)
{
wait(1);
printf("step1\n\n");
wait(1);
printf("step2\n\n");
wait(1);
printf("step3\n\n");
wait(1);
printf("step4\n\n");
SwitchToFiber(fiber_context[0]);
}
int main()
{
fiber_context[0] = ConvertThreadToFiber(NULL);
fiber_context[1] = CreateFiber(4096, fiberProc,0);
boost::asio::deadline_timer tLong(io, boost::posix_time::seconds(8));
tLong.async_wait(print);
SwitchToFiber(fiber_context[1]);
io.run();
return 0;
}