Aracılığıyla paylaş


Nasıl yapılır: veri potansiyel kullanım transformer

Bu konuda nasıl kullanılacağını gösteren temel bir örneği içeren concurrency::transformer veri potansiyel sınıfı.Görüntü işlemeyi gerçekleştirmek için veri kanalı kullanan daha tam bir örnek için bkz: İzlenecek yol: görüntü işleme ağ oluşturma.

Ardışık veri eşzamanlı programlamada yaygın bir örnektir.Burada her aşaması iş yapar ve sonra o çalışmanın sonucunu sonraki aşamaya geçen aşamaları bir dizi veri potansiyel oluşmaktadır.transformer Bir girdi değeri alması nedeniyle önemli bir bileşen veri pipelines sınıfı bu değeri iş yapar ve daha sonra kullanmak üzere başka bir bileşen için bir sonuç üretir.

Örnek

Bu örnekte aşağıdaki verileri ardışık dönüşümleri bir ilk değer giriş verilen bir dizi gerçekleştirmek için kullanır:

  1. İlk aşamada kendi giriş mutlak değerini hesaplar.

  2. İkinci aşamada, giriş'in kare kökü hesaplar.

  3. Üçüncü aşama, giriş kare hesaplar.

  4. İleri Sahne girişini olumsuzlar.

  5. Beşinci aşama sonuç iletisini arabelleğe yazar.

Son olarak, örneğin potansiyel konsola sonucu yazdırır.

// 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;
}

Bu örnek aşağıdaki çıktıyı üretir:

The result is -42.

Giriş değerini farklı bir değer çıktı için veri potansiyel bir aşamasına yaygındır.Bu örnekte, İkinci aşamada türde bir değer alır int kendi giriş olarak ve o değerinin kare kökünü verir (bir double), çıktı olarak.

[!NOT]

Bu örnekte veri kanalı için örnek olur.Daha Ağır her dönüştürme işlemi az iş gerçekleştirdiğinden, ek yükü ileti geçişini gerçekleştirmek için gerekli verileri ardışık kullanmanın yararları basmaktadır.

Kod Derleniyor

Örnek kodu kopyalayın ve Visual Studio Project'te yapıştırın veya adlı bir dosyaya yapıştırın veri pipeline.cpp ve Visual Studio komut istemi penceresinde aşağıdaki komutu çalıştırın.

cl.exe /EHsc data-pipeline.cpp

Ayrıca bkz.

Görevler

İzlenecek yol: görüntü işleme ağ oluşturma

Kavramlar

Zaman uyumsuz aracıları kitaplığı

Zaman uyumsuz ileti blokları