本文整理汇总了C++中ThreadPool类的典型用法代码示例。如果您正苦于以下问题:C++ ThreadPool类的具体用法?C++ ThreadPool怎么用?C++ ThreadPool使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ThreadPool类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: upto
void Scene::computeColorsAntialiasing(std::function<void(int, int, ColorCRef)> paint, int threadCount, int level) {
upto(threadCount, 1);
downto(threadCount, 4);
std::vector< std::vector <ColorFloat> > m(screen.width, std::vector<ColorFloat> (screen.height, ColorFloat()));
computeColors([paint, &m](int x, int y, ColorCRef c) { m[x][y] = c; paint(x, y, c); }, threadCount);
if (level > 1) {
for (int x = 1; x + 1 < screen.width; x++) {
for (int y = 1; y + 1 < screen.height; y++) {
int badness = 0;
for (int dx : {-1, 1})
for (int dy : {-1, 1})
badness += (m[x][y] - m[x + dx][y + dy]).norm();
if (badness > badnessLimit) {
paint(x, y, Color(255, 0, 0));
}
}
}
int taskCount = 10;
ThreadPool pool;
for (int t = 0; t < taskCount; t++)
pool.addTask([this, &paint, &m, level, t, taskCount]()
{ multiThreadAntialiasePart(paint, m, level, t, taskCount); });
pool.executeAll(threadCount);
}
}
开发者ID:yuri-pechatnov,项目名称:MiptCLionProjects,代码行数:25,代码来源:scene.cpp
示例2: debug
void Server::serve(int port, int maxClients, int numThreads) {
// set up the server socket
debug("Server::serve -- initializing listening socket");
int serverId = this->initSocket(port);
// set up the client manager
debug("Server::serve -- setting up client manager");
ClientManager* mgr = new ClientManager(maxClients);
// set up the thread pool
debug("Server::serve -- setting up thread pool");
ThreadPool* pool = new ThreadPool(numThreads);
pool->run(&run, mgr);
// set up client
int clientId;
struct sockaddr_in client_addr;
socklen_t clientlen = sizeof(client_addr);
// accept clients
debug("Server::serve -- waiting for client");
while ((clientId = accept(serverId, (struct sockaddr *)&client_addr, &clientlen)) > 0) {
ClientProxy* client = new ClientProxy(clientId);
debug("Server::serve -- adding client to queue");
mgr->pushClient(client);
}
// close the server socket
debug("Server::serve -- closing server socket");
close(serverId);
// clean up some memory (even though this will likely not ever be reached)
delete mgr;
delete pool;
}
开发者ID:keith-mcqueen,项目名称:MessageServer,代码行数:35,代码来源:Server.cpp
示例3: TEST
//-----------------------------------------------------------------------------
TEST(ThreadPool, Sequential_WithMPSCBoundedQueue) {
// add N jobs to the queue, and wait until all will be completed
// this test should be faster than Sequential_WithStdQueue
ThreadPool pool;
MPMCBoundedQueue<std::future<int>> queue(128);
const int repetitions = 100;
for (int i = 1; i <= repetitions; i++) {
queue.push(std::move(pool.process([i]() {
std::this_thread::sleep_for(std::chrono::milliseconds(20));
return i;
})));
}
int sum_actual = 0;
std::future<int> item;
while (queue.pop(item)) {
sum_actual += item.get();
}
auto sum = [](int n) -> int { return n * (n + 1) / 2; };
ASSERT_EQ(sum_actual, sum(repetitions));
}
开发者ID:eduardonunesp,项目名称:iroha,代码行数:27,代码来源:thread_pool_test.cpp
示例4: main
int main(int argc, char **argv){
bool ret = true;
long size = sysconf(_SC_NPROCESSORS_ONLN);
cout<<"number of workers: "<<size<<endl;
ThreadPool p;
ret = p.Init(size, start_routine, arg);
if (!ret){
return -1;
}
ret = p.Start();
if (!ret){
p.Shutdown();
return -1;
}
int n = 3;
while(n-->0){
sleep(2);
}
p.Shutdown();
return 0;
}
开发者ID:ongonginging,项目名称:demo,代码行数:28,代码来源:Test_ThreadPool.cpp
示例5: poll
void* ThreadPool::poll(void *arg) {
ThreadPool* ths = (ThreadPool*)arg;
while (true) {
if (!ths->prioritypooling) {
if (ths->wpool->tasksPending()) {
Task *task = ths->wpool->getTask();
PoolThread *idleThread = ths->getIdleThread();
idleThread->task = task;
idleThread->idle = false;
cout << "got task" << endl;
idleThread->mthread->interrupt();
} else {
Thread::mSleep(1);
}
} else {
if (ths->wpool->tasksPPending()) {
Task *task = ths->wpool->getPTask();
PoolThread *idleThread = ths->getIdleThread();
idleThread->task = task;
idleThread->idle = false;
idleThread->mthread->interrupt();
} else {
Thread::mSleep(1);
}
}
}
return NULL;
}
开发者ID:greenbaum,项目名称:ffead-cpp,代码行数:28,代码来源:ThreadPool.cpp
示例6: xp
bool ApService::InitApService(std::string ApListenIp, int ApListenPort, int threadPoolNum) {
bool status = true;
_ApListenIp = ApListenIp;
_ApListenPort = ApListenPort;
_threadPoolNum = threadPoolNum;
SharedPointer<IProcessor> xp(
new apapiProcessor(
SharedPointer<apapi>(
new ApService)));
ServiceManager sm;
sm.add_service(xp);
ThreadPool tp;
tp.init(_threadPoolNum);
Server* server = new Server(&sm, &tp, _ApListenPort);
if (0 != server->serve()) {
status = false;
}
return status;
}
开发者ID:AaronZhangL,项目名称:CC,代码行数:25,代码来源:ApService.cpp
示例7: testExecPerSecond
void testExecPerSecond(int numberOfThreads, int numberOfKeys)
{
ThreadPool<Task> pool;
pool.init(numberOfThreads, numberOfKeys, 10000);
for (long long int i = 0; ; ++i) {
Task t(i % numberOfKeys);
pool.enqueue(t);
if (i % 100000 == 0) {
int execCounterCur = execCounter.load();
int millisCur = getMilliseconds();
if (execCounterPrev != 0) {
int counterDif = execCounterCur - execCounterPrev;
long long int millisDif = millisCur - millisPrev;
long long int execPerSec = (counterDif / millisDif) * 1000;
cout << "exec per sec: " << execPerSec << "" << endl;
}
execCounterPrev = execCounterCur;
millisPrev = millisCur;
}
}
}
开发者ID:vovaprog,项目名称:learn,代码行数:28,代码来源:test_thread_pool.cpp
示例8: testThreadPool
int testThreadPool()
{
#ifdef __LINUX__
cout << "this is linux" << endl;
#endif
#ifdef __WINDOWS__
cout << "this is windows" << endl;
#endif
ThreadPool pool;
pool.Run(8);
pool.AddTask(new MyTask());
MySignal si;
for (int i = 0; i < 8; ++i)
//while (running)
{
pool.AddTask(new MyTask());
cout << "add task ...." << endl;
//Timer::Sleep(500);
}
int sec = 0;
while (running)
{
cout << "wait sec " << sec++ << endl;
Timer::Sleep(1000);
}
return 0;
}
开发者ID:face2wind,项目名称:CodingProjects,代码行数:34,代码来源:thread_demo.cpp
示例9: CoInitialize
DWORD WINAPI ThreadPool::WorkerThread(LPVOID lpParam)
{
CoInitialize(NULL);
ThreadPool *obj = (ThreadPool *)lpParam;
CARBONLOG_CLASS_PTR logger(carbonLogger::getLoggerPtr());
CARBONLOG_INFO(logger, "[WorkerThread] : starting worker thread now..");
while(obj->shouldContinue)
{
std::string jobMsg, jobOutput;
if(obj->getJobMsg(jobMsg))
{
CARBONLOG_DEBUG(logger, "[WorkerThread] : Processing job ..");
processJob(jobMsg,jobOutput);
if(!obj->writeJobOutput(jobOutput))
CARBONLOG_ERROR(logger, "[WorkerThread] : Failed to write packet to BI");
}
else
Sleep(10);
}
CARBONLOG_INFO(logger, "[WorkerThread] : exiting worker thread now..");
CoUninitialize();
return 0;
}
开发者ID:saurabh1403,项目名称:carbon-app-management,代码行数:29,代码来源:ThreadPool.cpp
示例10: calculateDirectIxn
void CpuNonbondedForce::calculateDirectIxn(int numberOfAtoms, float* posq, const vector<RealVec>& atomCoordinates, const vector<pair<float, float> >& atomParameters,
const vector<set<int> >& exclusions, vector<AlignedArray<float> >& threadForce, double* totalEnergy, ThreadPool& threads) {
// Record the parameters for the threads.
this->numberOfAtoms = numberOfAtoms;
this->posq = posq;
this->atomCoordinates = &atomCoordinates[0];
this->atomParameters = &atomParameters[0];
this->exclusions = &exclusions[0];
this->threadForce = &threadForce;
includeEnergy = (totalEnergy != NULL);
threadEnergy.resize(threads.getNumThreads());
gmx_atomic_t counter;
gmx_atomic_set(&counter, 0);
this->atomicCounter = &counter;
// Signal the threads to start running and wait for them to finish.
ComputeDirectTask task(*this);
threads.execute(task);
threads.waitForThreads();
// Combine the energies from all the threads.
if (totalEnergy != NULL) {
double directEnergy = 0;
int numThreads = threads.getNumThreads();
for (int i = 0; i < numThreads; i++)
directEnergy += threadEnergy[i];
*totalEnergy += directEnergy;
}
}
开发者ID:OndrejMarsalek,项目名称:openmm,代码行数:32,代码来源:CpuNonbondedForce.cpp
示例11: execute
static void NO_INLINE execute(const Source & data, size_t num_threads, std::vector<std::unique_ptr<Map>> & results,
Creator && creator, Updater && updater,
ThreadPool & pool)
{
results.reserve(num_threads);
for (size_t i = 0; i < num_threads; ++i)
results.emplace_back(new Map);
for (size_t i = 0; i < num_threads; ++i)
{
auto begin = data.begin() + (data.size() * i) / num_threads;
auto end = data.begin() + (data.size() * (i + 1)) / num_threads;
auto & map = *results[i];
pool.schedule([&, begin, end]()
{
for (auto it = begin; it != end; ++it)
{
typename Map::iterator place;
bool inserted;
map.emplace(*it, place, inserted);
if (inserted)
creator(place->second);
else
updater(place->second);
}
});
}
pool.wait();
}
开发者ID:filimonov,项目名称:ClickHouse,代码行数:32,代码来源:parallel_aggregation2.cpp
示例12: main
int main(int argc, char **args) {
int ret = log_init("./conf", "simple_log.conf");
if (ret != 0) {
printf("log init error!");
return 0;
}
if (argc < 2) {
LOG_ERROR("usage: ./http_multi_thread_demo [port]");
return -1;
}
pthread_key_create(&g_tp_key,NULL);
ThreadPool tp;
tp.set_thread_start_cb(test_start_fn);
tp.set_thread_exit_cb(test_exit_fn);
tp.set_pool_size(4);
HttpServer http_server;
http_server.set_thread_pool(&tp);
http_server.add_mapping("/hello", hello);
http_server.add_bind_ip("127.0.0.1");
http_server.set_port(atoi(args[1]));
http_server.set_backlog(100000);
http_server.set_max_events(100000);
http_server.start_async();
//sleep(1);
http_server.join();
return 0;
}
开发者ID:hongliuliao,项目名称:ehttp,代码行数:32,代码来源:http_multi_thread_demo.cpp
示例13: DoObjectLockTest
void DoObjectLockTest( void )
{
cout << "Starting DoObjectLockTest" << endl;
LockableObjects & objects = GetLockableObjects();
objects.reserve( ObjectCount );
for ( unsigned int ii = 0; ii < ObjectCount; ++ii )
{
LockableObject * object = new LockableObject( ii );
objects.push_back( object );
}
{
ThreadPool pool;
pool.Create( ThreadCount, &RunObjectTest );
pool.Start();
pool.Join();
}
unsigned int totalFails = 0;
for ( unsigned int ii = 0; ii < ThreadCount; ++ii )
{
const unsigned int failCount = FailCounts[ ii ];
::Loki::Printf( "Thread: [%u] Failures: [%u]\n" )( ii )( failCount );
totalFails += failCount;
}
const char * result = ( 0 == totalFails ) ? "Passed" : "FAILED";
cout << "Finished DoObjectLockTest. Total Fails: " << totalFails << " Result: "
<< result << endl;
}
开发者ID:JackieXie168,项目名称:loki,代码行数:31,代码来源:main.cpp
示例14: ThreadPool
unsigned RainbowTable::findPasswordByHash(unsigned* hash) {
int i;
Chain resultChain;
vector<vector<string> > result;
ThreadPool* myPool = new ThreadPool(THREADS_COUNT);
myPool->initializeThreads();
for (i = CHAIN_LENGTH - 1; i >= 0; --i) {
PasswordFindWorkerThread* myThread =
new PasswordFindWorkerThread(i, hash);
myPool->assignWork(myThread);
if (PasswordFindWorkerThread::result != 0) {
break;
}
}
myPool->destroyPool(1);
delete myPool;
printf("false alarm count: %d\n",
PasswordFindWorkerThread::falseAlarmCount);
if (PasswordFindWorkerThread::result != 0) {
return PasswordFindWorkerThread::result;
}
return 0;
}
开发者ID:kiritsev,项目名称:Rainbow-tables,代码行数:32,代码来源:RainbowTable.cpp
示例15: main
int main (int argc, const char * argv[])
{
//Create a new thread pool
ThreadPool pool;
//Get the number of threads, this defaults to the number of threads on your machine
const unsigned int numThreads = pool.getThreadPoolSize();
//Set the number of tasks that we want to pass to the thread pool
const unsigned int numTasks = 100;
//Setup a vector to store the results
std::vector< double > results( numTasks );
std::vector< std::future< void > > status( numTasks );
//Add some tasks to the pool
for(unsigned int i=0; i<numTasks; i++){
status[i] = pool.enqueue( task, 99999, results[i] );
}
//Wait for the tasks to complex
for(unsigned int i=0; i<numTasks; i++){
status[i].wait();
}
//Get the maximum value across all the task results
double maxValue = results[0];
for(unsigned int i=1; i<numTasks; i++){
if( results[i] > maxValue ) maxValue = results[i];
}
infoLog << "maximum value: " << maxValue << std::endl;
return EXIT_SUCCESS;
}
开发者ID:BryanBo-Cao,项目名称:grt,代码行数:35,代码来源:ThreadPoolExample.cpp
示例16: percolate
FoundPoint percolate (const int size, ThreadPool& pool) {
std::vector<std::future<FoundPoint>> points;
FoundPoint max = FoundPoint();
int numThreads = pool.getSize();
int numOpThreadM = size/ numThreads;
int numOpThreadR = size % numThreads;
bool end = false;
for (int i = 0; i < numThreads; ++i) {
int startIndex = numOpThreadM * i;
int lastIndex = numOpThreadM * (i + 1);
if ((i + 1 == numThreads && numOpThreadR > 0)
|| numOpThreadM == 0) {
lastIndex += numOpThreadR;
end = true;
}
points.emplace_back(pool.enqueue_return(calc, startIndex,
lastIndex, size));
if (end) break;
}
for (auto& f: points) {
FoundPoint tmpFP = f.get();
if (tmpFP.value < max.value){
max = tmpFP;
}
}
return max;
}
开发者ID:ptkila,项目名称:cowichan-problems-tcc,代码行数:35,代码来源:cpp11_invperc.cpp
示例17: main
int main()
{
std::string input;
std::string output;
double score;
corrector * corr = new corrector();
std::string cFile = "../Training/PrideAndPrejudice/PrideAndPrejudice.txt";
std::string tFile = "../Training/PrideAndPrejudice/tess2.txt";
corr->loadDictionary("../Dictionary/unigrams.txt");
corr->loadErrors("../trained5.txt");
//corr->learn(tFile, cFile);
//std::cout<<"learned"<<std::endl;
//corr->writeErrors("trained5.txt");
sqlite3 *db;
int rc;
rc = sqlite3_open("../Dictionary/BigramDatabase.db", &db);
if (rc)
{
std::cout<<"Can't open database"<<std::endl;
return 1;
}
std::string first = "0BEGIN.0";
double confidence;
ThreadPool tpool (4);
while (std::cin>>input)
{
//wordList = new std::list<entry>();
//corr->fillPossibleWordListLin(wordList, input, -20);
//entry e = wordList->front();
output = correct(input, corr, first, db, &tpool);
std::cout<<"returned"<<std::endl;
std::cout<<output<<std::endl;
/*output = Viterbi3( input, corr, db, 56000000, 50, 300);
std::cout<<"returned"<<std::endl;
std::cout<<output<<std::endl;*/
std::stringstream ss (output);
while (ss>>first);
//delete wordList;
}
tpool.shutdown();
delete corr;
return 0;
}
开发者ID:thomkrillis,项目名称:SpellCorrector,代码行数:59,代码来源:threadedSpellCheck.cpp
示例18: __declspec
void __declspec(dllexport) GetSleep(LPVOID poolarg, LPVOID vectargs)
{
ThreadPool* pool =(ThreadPool*) poolarg;
std::vector<std::wstring>* vect = (std::vector<std::wstring>*) vectargs;
int count = _wtoi(vect->at(0).data());
for (int i = 0; i< count; i++)
pool->AddTask(WorkerGotDream,NULL);
}
开发者ID:LoserKiss,项目名称:SkinnyGirl,代码行数:8,代码来源:FunctionsDLL.cpp
示例19: signalHandler
void signalHandler(int sig) {
ThreadPool* pool = ThreadPool::Instance();
// JoinAll will deal with the memory de-allocation
// if all the threads are safely quited.
// so calling CancelAll here is fine
pool->CancelAll();
}
开发者ID:yzard,项目名称:generic-gameengine,代码行数:8,代码来源:threadpool_test.cpp
示例20: execute
void TaskBlock::execute(ThreadPool& pool)
{
for(auto&&task : tasks)
pool.schedule_task(task);
pool.assist_until([this](){return done();});
//pool.print_accounts();
}
开发者ID:jsupancic,项目名称:AStar_Dual_Tree_HandPose,代码行数:8,代码来源:ThreadPoolCXX11.cpp
注:本文中的ThreadPool类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论