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

Methoden

MethodeBeschrijving
static GetAvailableThreads(int&, int&)Haalt het aantal beschikbare threads op.
static GetInstance()RTTI-informatie.
static GetMaxThreads(int&, int&)Haalt het maximale aantal gelijktijdige threads op.
static GetMinThreads(int&, int&)Haalt het minimale aantal threads op dat door de pool wordt aangemaakt.
static JoinAllThreads()Voegt alle eigen threads samen. Wacht oneindig.
operator=(const ThreadPool&)Geen kopiëren.
static QueueUserWorkItem(WaitCallback)Plaatst een werkitem in de wachtrij die aanwezig is met een callback zonder parameters.
static QueueUserWorkItem(WaitCallback, const System::SharedPtr<System::Object>&)Plaatst een werkitem in de wachtrij die aanwezig is met een callback zonder parameters.
static SetMaxThreads(int, int)Stelt het aantal threads in dat eigendom is van de pool.
static SetMinThreads(int, int)Stelt het minimale aantal threads in dat eigendom is van de pool.
ThreadPool(const ThreadPool&)Geen kopiëren.

Opmerkingen

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

Zie ook