Jak: wykorzystanie transformer planowanej danych
Ten temat zawiera przykład podstawowego, który pokazuje, jak użyć concurrency::transformer klasy w rurociągu danych.Aby uzyskać bardziej rozbudowany przykład wykorzystuje rurociąg dane do przetwarzania obrazu, zobacz Instruktaż: Tworzenie sieci przetwarzania obrazu.
Przetwarzanie potokowe danych jest wspólnego wzorca w współbieżnym.Rurociąg danych składa się z szeregu etapów, gdzie każdy etap wykonuje pracę, a następnie przekazywać wynik tej pracy do następnego etapu.transformer Klasy rurociągi kluczowy element danych, ponieważ otrzymuje wartość wejściowa, wykonuje pracę na wartość, a następnie daje wynik dla innego składnika użyć.
Przykład
Przykład używa następujących rurociąg danych do wykonania szeregu przekształcenia danej początkowe wartości wejściowe:
Pierwszy etap oblicza wartość bezwzględna jego wprowadzania.
Drugi etap oblicza pierwiastek kwadratowy z jego wprowadzania.
Trzeci etap oblicza kwadrat jego wprowadzania.
Do przodu etapie podważa jego wprowadzania.
Piąty etap zapisuje wynik końcowy bufor komunikatów.
Wreszcie przykład drukuje wynik rurociąg do konsoli.
// data-pipeline.cpp
// compile with: /EHsc
#include <agents.h>
#include <math.h>
#include <iostream>
using namespace concurrency;
using namespace std;
int wmain()
{
// Computes the absolute value of its input.
transformer<int, int> t0([](int n) {
return abs(n);
});
// Computes the square root of its input.
transformer<int, double> t1([](int n) {
return sqrt(static_cast<double>(n));
});
// Computes the square its input.
transformer<double, int> t2([](double n) {
return static_cast<int>(n * n);
});
// Negates its input.
transformer<int, int> t3([](int n) {
return -n;
});
// Holds the result of the pipeline computation.
single_assignment<int> result;
// Link together each stage of the pipeline.
// t0 -> t1 -> t2 -> t3 -> result
t0.link_target(&t1);
t1.link_target(&t2);
t2.link_target(&t3);
t3.link_target(&result);
// Propagate a message through the pipeline.
send(t0, -42);
// Print the result to the console.
wcout << L"The result is " << receive(result) << L'.' << endl;
}
Ten przykład generuje następujące wyniki:
The result is -42.
Jest wspólne dla etapu w rurociągu danych do wyprowadzenia wartość, której typ różni się od wartości wejściowych.W tym przykładzie drugiego etapu przyjmuje wartości typu int jako swojego wejścia i produkuje pierwiastek kwadratowy wartości ( double) jako dane wyjściowe.
[!UWAGA]
Rurociąg danych w tym przykładzie jest na ilustracji.Ponieważ każda operacja transformacji wykonuje pracę little, obciążenie wymagane do wykonywania przekazywania wiadomości można przeważy korzyści z za pomocą rurociągów danych.
Kompilowanie kodu
Skopiuj przykładowy kod i wklej go w projekcie programu Visual Studio lub wkleić go w pliku o nazwie danych pipeline.cpp , a następnie uruchom następujące polecenie w oknie wiersza polecenia usługi programu Visual Studio.
cl.exe /EHsc data-pipeline.cpp
Zobacz też
Zadania
Instruktaż: Tworzenie sieci przetwarzania obrazu