/* Copyright (C) 2014 InfiniDB, Inc. This program 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; version 2 of the License. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include using namespace std; #include #include #include #include #include #include #include #include "weightedthreadpool.h" int thecount = 0; boost::mutex mutex; // Functor class struct foo { void operator ()() { for (int i = 0; i < 1024*1024*10; i++) // simulate some work fData++; //boost::mutex::scoped_lock lock(mutex); //std::cout << "foo count = " << ++thecount << " " << fData << std::endl; } foo(int i): fData(i) {} foo(const foo& copy) : fData(copy.fData) {} int fData; }; int main( int argc, char **argv) { threadpool::WeightedThreadPool pool( 100, 10, 5 ); for (int y = 0; y < 10; y++) { foo bar(y); for (int i = 0; i < 10; ++i) { pool.invoke(bar, 25); } boost::mutex::scoped_lock lock(mutex); std::cout << "count = " << ++thecount << std::endl; // Wait until all of the queued up and in-progress work has finished pool.wait(); pool.dump(); } }