Diskuze: Nezastavenie premennej ktora bezi vo vlakne

C# .NET .NET (C# a Visual Basic) Nezastavenie premennej ktora bezi vo vlakne American English version English version

Avatar
Tayson
Člen
Avatar
Tayson:

Zdravim

Mam takyto problem. Mam premennu s nazvom receivedString ktora je definovana lokalne v triede. Tato premenna je spustena vo vlakne kde vycitava stale dookola data cez UDP protkol.

Vyzera to nasledovne:

public static string receivedString=""; //lokalne zadefinovanie premennej

public Thread t;

public communication() //konstruktor
{
t = new Thread(new ThreadStart(lis­ten)); //spustenie funkcie vo vlakne
}

public void listen()

{

...vycitavanie dat cez UDP

receivedString = Encoding.ASCI­I.GetString(re­ceived); //stale uklada data do premennej vo vlakne

}

Dalej v druhej triede porovnavam tuto premennu s nejakym textom cize hladam nejaky textovy retazec preto ju mam aj staticku. To hladanie mam taktiez spustene vo vlakne a stale dookola porovnava retazec ktory chcem s datami ktore prichadzaju.

Vyzera to nasledovne:

while (true)
{
if (communication­.receivedStrin­g.Contains("bla­bla"))
{Set();

...

}

}

Samozrejme si to vypisujem do textboxu tie data ktore dookola prichadzaju cez UDP. Vypisovanie do textboxu prebieha este v predchadzajucej triede vo funkcii listen.

Samotny problem je v tom ze ja ak pouzijem EventWaitHandle a pride program na miesto kde je napisane WaitOne(); tak cakam kym sa nesplni podmienka ze sa retazec v premennej bude rovnat mojmu retazcu ktory hladam a potom sa vykona Set(); a program bezi dalej od miesta kde bolo WaitOne(); Mam teraz na mysli tu druhu funkciu ktora bezi vo vlakne a stale dookola porovnava. Ale mne pokial nenastavi to Set(); tak hlada vo vlakne stale dookola retazec ale ta premenna receivedString zamrzne aj ked je spustena vo vlakne. Preco je to tak ked ja tym EventWaitHandle zastavim len vykonavanie hlavneho vlakna kde mi nebude nic vypisovat do textboxu ale ta premenna vo vlakne by sa mala stale menit.

 
Odpovědět 28.10.2013 10:56
Avatar
Gramli
Redaktor
Avatar
Gramli:

Zdravím,
s vlákny jsem moc nepracoval, používal jsem backgroundworkery, ale není tam problém v tom, že si tu proměnou deklaruješ v jiném vlákně než ve kterém ji používáš?

Nahoru Odpovědět 29.10.2013 8:00
Kdo to říká ten to je...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.