System::Threading::ThreadPool classe

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

Metodi

MetodoDescrizione
static GetAvailableThreads(int&, int&)Ottiene il numero di thread disponibili.
static GetInstance()Informazioni RTTI.
static GetMaxThreads(int&, int&)Ottiene il numero massimo di thread concorrenti.
static GetMinThreads(int&, int&)Ottiene il numero minimo di thread creati dal pool.
static JoinAllThreads()Unisce tutti i thread posseduti. Attende indefinitamente.
operator=(const ThreadPool&)Nessuna copia.
static QueueUserWorkItem(WaitCallback)Inserisce l’elemento di lavoro nella coda, presente con un callback senza parametri.
static QueueUserWorkItem(WaitCallback, const System::SharedPtr<System::Object>&)Inserisce l’elemento di lavoro nella coda, presente con un callback senza parametri.
static SetMaxThreads(int, int)Imposta il numero di thread posseduti dal pool.
static SetMinThreads(int, int)Imposta il numero minimo di thread posseduti dal pool.
ThreadPool(const ThreadPool&)Nessuna copia.

Osservazioni

#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
*/

Vedi anche