C# windows form-ban, hogy tudnák ilyen végtelen ciklust csinálni?
Figyelt kérdés
Van egy vagyon változó és két külön szálról kap értékeket végtelen ideig, az egyikről másodpercenként 2-őt, a másikról 10másodpercenként 5-öt és mindezt úgy, hogy közben tudjam fejleszteni ezeket és a vagyonból tudjak elkölteni.Sehogy se jó, ahogy csinálom, mindig kifagy vagy hibás.2019. dec. 3. 16:01
3/10 A kérdező kommentje:
Hát nem tudom, most thread-et, while(true) ciklust kellene alkalmazni vagy valami egészen mást...
2019. dec. 3. 19:24
5/10 anonim válasza:
keress rá a thread safety ín c# kulcsszóra, ha megérted garantáltan megoldódik a probléma, jelenleg az a helyzet, hogy ugye előfordulhat, hogy az adott változót egyszerre módosítod, és a rendszer nem tudja eldönteni, hogy most melyik fusson le először / összeakad, érte vannak különböző megoldások (én javahoz értek, ott pl a synchornized, vagy thread safe adattipusok)
6/10 anonim válasza:
C#-ban lockolni lehet olyan elemeket amik referencia típusúak, ezáltal amíg az egyik szál dolgozik az elemmel másik szál nem tud benne módosítani semmit.
7/10 anonim válasza:
object qlock = new object(); //osztály szintű változóknak
int vagyon = 0;
public IndítKonstruktor(){
//TaskCreationOptions.LongRunning hogy mindenképp külön szálon fusson
new Task(ElsoSzálVárakozáhely, TaskCreationOptions.LongRunning).Start();
new Task(MásodikSzálVárakozóhely, TaskCreationOptions.LongRunning).Start();
}
public ElsoSzálVárakozóhely(){
while (true){
Hozzáad(2);
Thread.Sleep(1000);
}
}
public MásodikSzálVárakozóhely(){
while (true){
Hozzáad(5);
Thread.Sleep(10000);
}
}
public void Hozzáad(int x){
lock (qlock)
{
vagyon += x;
}
}
public void Elkölt(int x){
lock (qlock)
{
vagyon -= x;
}
}
Amíg az egyik szál benn van a lock-ban addig nem engedi a másikat.
8/10 anonim válasza:
void-okat lehagytam, de remélem érthető
9/10 anonim válasza:
Vagy lockolod ahogy fentebb írták, vagy használod az Interlocked.Add metódust:
10/10 A kérdező kommentje:
köszönöm szépen a segítséget! :)
2019. dec. 5. 16:48
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!