iLab Neuromorphic Robotics Toolkit  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
tests/test-Async.C
/*! @file
@author Pezhman Firoozfam
@copyright GNU Public License (GPL v3)
@section License
@verbatim
// ////////////////////////////////////////////////////////////////////////
// The iLab Neuromorphic Robotics Toolkit (NRT) //
// Copyright 2010-2012 by the University of Southern California (USC) //
// and the iLab at USC. //
// //
// iLab - University of Southern California //
// Hedco Neurociences Building, Room HNB-10 //
// Los Angeles, Ca 90089-2520 - USA //
// //
// See http://ilab.usc.edu for information about this project. //
// ////////////////////////////////////////////////////////////////////////
// This file is part of The iLab Neuromorphic Robotics Toolkit. //
// //
// The iLab Neuromorphic Robotics Toolkit is free software: you can //
// redistribute it and/or modify it under the terms of the GNU General //
// Public License as published by the Free Software Foundation, either //
// version 3 of the License, or (at your option) any later version. //
// //
// The iLab Neuromorphic Robotics Toolkit is distributed in the hope //
// that it will be useful, but WITHOUT ANY WARRANTY; without even the //
// implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
// PURPOSE. See the GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with The iLab Neuromorphic Robotics Toolkit. If not, see //
// <http://www.gnu.org/licenses/>. //
// ////////////////////////////////////////////////////////////////////////
@endverbatim */
//#define NRT_USE_STD_ASYNC
//#define NRT_DEBUG_ASYNC
#include <math.h>
#include <unistd.h>
int main()
{
std::vector<std::future<void> > res;
NRT_DEBUG("Making 10 async calls");
int i = 0;
for (; i < 10; ++i)
{
// Call a little lambda function that just sleeps for a while and then print number i;
// Each async call will return a future:
res.push_back(nrt::async([=]() { usleep(rand()/1000); NRT_INFO(i); }));
}
NRT_DEBUG("Waiting for a little while so at least one thread finish");
usleep(rand()/1000);
NRT_DEBUG("Making 5 async calls");
for (int j = i; j < i + 5; ++j)
{
res.push_back(nrt::async([=]() { usleep(rand()/1000); NRT_INFO(j); }));
}
NRT_DEBUG("Waiting for all to finish");
for (auto & r: res) r.wait();
NRT_DEBUG("DONE");
return 0;
}