předávání dat mezi vlákny   otázka

C#, Threading

Mohl by mi prosím někdo poradit jak realizovat předávání si seznamu List<object> mezi vlákny. Mám třídu DeviceThreadClass, která mi čte data ze zařízení ve vlastním vláknu. Těch zařízení mám více, pro každé je spuětěno jedno vlákno. Pak bych potřeboval ta data v jiném vláknu zpracovávat (ProcessThreadClass) a v dalším pak vypisovat (OutputThreadClass) nebo archivovat.

díky moc

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<DeviceThreadClass> listOfDevices = new List<DeviceThreadClass>();

            // ziskavni dat
            for (int i = 0; i < 10; i++)
                listOfDevices.Add(new DeviceThreadClass("vlakno" + i.ToString()));

            // zpracovavani dat
            ProcessThreadClass process = new ProcessThreadClass();

            // vypis dat
            OutputThreadClass output = new OutputThreadClass();

            Console.ReadLine();
        }

        /// <summary>
        /// Trida, ktera zpracovava data ze vsech vlaken z listOfDevices. 
        /// (napr. hlida prvni promennou v seznamu
        /// a pokud preleze nejakou mez, tak ji vynuluje)
        /// </summary>
        public class ProcessThreadClass
        {

        }

        /// <summary>
        /// Vlakno, ktere kazdych napr. 500ms zobrazuje na konzoli hodnoty prvni promenne ze seznamu
        /// ze vsech vlaken z listOfDevices
        /// </summary>
        public class OutputThreadClass
        {

        }

        /// <summary>
        /// Trida, ktera ziskava data a uklada je do seznamu listOfData
        /// </summary>
        public class DeviceThreadClass
        {
            public List<object> listOfData;
            protected Thread thread;

            /// <summary>
            /// vytvori listOfData a spusti vlakno
            /// </summary>
            /// <param name="name"></param>
            public DeviceThreadClass(string name)
            {
                listOfData = new List<object>();
                listOfData.Add(new object());
                listOfData.Add(new object());

                thread = new Thread(new ThreadStart(DoWork));
                thread.Name = name;
                thread.Start();
            }

            /// <summary>
            /// Simulace ziskavani dat.
            /// </summary>
            internal void DoWork()
            {
                int i = 0;
                decimal d = 0;

                while (true)
                {
                    listOfData[0] = i++;
                    listOfData[1] = d += 0.1m;
                    //Console.WriteLine("{0}: {1} {2}", thread.Name, listOfData[0], listOfData[1]);
                    Thread.Sleep(100);
                }
            }

        }
    }
}

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback