Asio+fiber


以下是一个asiofiber结合的最简单的小例子。

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;
}

发表评论


0.037 sec