Postupy: Použití transformace v datovém kanálu
Toto téma obsahuje základní příklad, který ukazuje, jak použít concurrency::transformer třídy datového kanálu.Úplnější příklad, který používá data kanálu zpracování obrazu, viz Návod: Vytvoření sítě pro zpracování obrázků.
Použití datových kanálů je společný vzorek v souběžné programování.Kanál dat sestává z řady stádií, kde každé fázi práce provádí a potom předá výsledek této práce do další fáze.transformer Třídy klíčovou součástí dat potrubí, protože obdrží vstupní hodnotu, provádí práci na tuto hodnotu a potom vytvoří výsledek pro jiné komponenty, které chcete použít.
Příklad
Tento příklad používá můžete provést posloupnost transformací nastavena na počáteční hodnotu vstupního potrubí následující data:
První etapa vypočítá absolutní hodnota jeho vstup.
Druhá etapa vypočítá druhou odmocninu z jeho vstup.
Třetí etapa počítá buňky jeho vstup.
Tam Neguje fázi jeho vstup.
Pátá fáze konečný výsledek zapíše do vyrovnávací paměti zprávy.
Nakonec příklad vytiskne výsledek potrubí do konzoly.
// 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;
}
Tento příklad vytvoří následující výstup:
Je běžné pro fázi v kanálu data na výstup hodnoty, jejichž typ se liší od jeho vstupní hodnotu.V tomto příkladu druhá etapa má hodnotu typu int jako vstup a vytváří druhou odmocninu hodnoty ( double) jako výstup.
[!POZNÁMKA]
Kanál dat v tomto příkladu je pro ilustraci.Vzhledem k tomu, že každá operace transformace provádí málo práce, tedy režie požadované k provedení předávání zpráv předčit výhody použití datového kanálu.
Probíhá kompilace kódu
Zkopírovat ukázkový kód a vložit jej do projektu sady Visual Studio nebo vložit do souboru s názvem dat pipeline.cpp a potom spusťte následující příkaz v okně Příkazový řádek Visual Studio.
cl.exe /EHsc data-pipeline.cpp
Viz také
Úkoly
Návod: Vytvoření sítě pro zpracování obrázků