System::Threading::ThreadPool class

ThreadPool class

Thread pool API allowing it pushing jobs into queue to be read by pool of worker threads. This is a static type with no instance services. You should never create instances of it by any means.

class ThreadPool : public System::Object

Métodos

MétodoDescripción
static GetAvailableThreads(int&, int&)Obtiene el número de hilos disponibles.
static GetInstance()Información RTTI.
static GetMaxThreads(int&, int&)Obtiene el número máximo de hilos concurrentes.
static GetMinThreads(int&, int&)Obtiene el número mínimo de hilos creados por el pool.
static JoinAllThreads()Une todos los hilos propios. Espera indefinidamente.
operator=(const ThreadPool&)Sin copia.
static QueueUserWorkItem(WaitCallback)Coloca el elemento de trabajo en la cola que está presente con una devolución de llamada sin parámetros.
static QueueUserWorkItem(WaitCallback, const System::SharedPtr<System::Object>&)Coloca el elemento de trabajo en la cola que está presente con una devolución de llamada sin parámetros.
static SetMaxThreads(int, int)Establece el número de hilos propiedad del pool.
static SetMinThreads(int, int)Establece el número mínimo de hilos propiedad del pool.
ThreadPool(const ThreadPool&)Sin copia.

Observaciones

#include "system/threading/thread_pool.h"
#include "system/threading/thread.h"
#include "system/object.h"
#include "system/smart_ptr.h"
#include <iostream>
#include <mutex>
#include <string>
#include <thread>

const std::string &BooleanToString(bool value)
{
  static const std::string True = "True";
  static const std::string False = "False";

  return value ? True : False;
}

int main()
{
  using namespace System::Threading;
  std::mutex m;

  const auto threadsCount = std::thread::hardware_concurrency();

  for (unsigned int i = 0; i < threadsCount; ++i)
  {
    ThreadPool::QueueUserWorkItem([&m](System::SharedPtr<System::Object> object) -> void {
      auto thread = Thread::get_CurrentThread();
      m.lock();
      std::cout << "Background: " << BooleanToString(thread->get_IsBackground()) <<
        ", Thread pool: " << BooleanToString(thread->get_IsThreadPoolThread()) <<
        ", Thread ID: " << thread->get_ManagedThreadId() << std::endl;
      m.unlock();
    });
  }

  ThreadPool::JoinAllThreads();

  return 0;
}
/*
This code example produces the following output:
Background: True, Thread pool: True, Thread ID: 1
Background: True, Thread pool: True, Thread ID: 3
Background: True, Thread pool: True, Thread ID: 5
Background: True, Thread pool: True, Thread ID: 6
Background: True, Thread pool: True, Thread ID: 9
Background: True, Thread pool: True, Thread ID: 1
Background: True, Thread pool: True, Thread ID: 7
Background: True, Thread pool: True, Thread ID: 2
Background: True, Thread pool: True, Thread ID: 4
Background: True, Thread pool: True, Thread ID: 3
Background: True, Thread pool: True, Thread ID: 12
Background: True, Thread pool: True, Thread ID: 8
Background: True, Thread pool: True, Thread ID: 5
Background: True, Thread pool: True, Thread ID: 6
Background: True, Thread pool: True, Thread ID: 16
Background: True, Thread pool: True, Thread ID: 11
*/

Ver también