protected override void RadiObradu() { while (radi) { StranaOglasa stranaOglasa = procitaneStrane.Uzmi() as StranaOglasa; if (stranaOglasa != null) { Common.Model.Vehicle.Automobile auto = null; try { if (stranaOglasa.Procitaj()) { auto = stranaOglasa.Automobil; if (auto != null) { autoDB.Save(auto); Dnevnik.PisiSaImenomThreda("Dodat oglas u bazu: " + auto.ToString()); } } else { Dnevnik.PisiSaThredomGreska("Nisam uspeo da pročitam stranu. URL: " + stranaOglasa.Adresa); } } catch (Exception ex) { EventLogger.WriteEventError(string.Format("Nisam uspeo da dodam automobil (br.ogl.{0}) u bazu.\nURL: {1}", auto.BrojOglasa, stranaOglasa.Adresa), ex); } } else { EventLogger.WriteEventWarning("Dobijena null vrednost za stranu iz liste procitanih strana. Proveri zasto."); } } }
public void Stop() { Dnevnik.PisiSaImenomThreda("Zaustavljanje threadova."); try { for (int i = 0; i < pisacZaglavlja.Length; i++) { pisacZaglavlja[i].Zaustavi(); } for (int i = 0; i < citacZaglavlja.Length; i++) { citacZaglavlja[i].Zaustavi(); } for (int i = 0; i < citacOglasa.Length; i++) { citacOglasa[i].Zaustavi(); } Procode.PolovniAutomobili.Data.Provider.DataInstance.Data.Close(); Dnevnik.PisiSaImenomThreda("Glavna obrada zaustavljena. Poslate komande za zaustavljanje."); } catch (Exception ex) { EventLogger.WriteEventError("Glavna obrada nije uspešno zaustavljena.", ex); } }
public Strana Uzmi() { Strana s = null; lock (lokerListe) { while (Lista.Count == 0) { lock (lokerRadi) { if (!radi) { return(null); } } Dnevnik.PisiSaImenomThreda("Uspavan. Lista je prazna. Elemenata " + Lista.Count + "."); Monitor.Wait(lokerListe); Dnevnik.PisiSaImenomThreda("Probuđen. Lista je bila prazna. Elemenata " + Lista.Count + "."); } s = (Strana)Lista.Dequeue(); switch (Common.Korisno.Korisno.disciplina) { case Common.Korisno.Korisno.Disciplina.dPulse: Dnevnik.PisiSaImenomThreda("Budim sledećeg. Uzeo element. Elemenata " + Lista.Count + "."); Monitor.Pulse(lokerListe); break; case Common.Korisno.Korisno.Disciplina.dPulseAll: Dnevnik.PisiSaImenomThreda("Budim sve. Uzeo element. Elemenata " + Lista.Count + "."); Monitor.PulseAll(lokerListe); break; } return(s); } }
public void Dodaj(Strana strana) { lock (lokerListe) { while (Lista.Count == velicina) // provera da li je lista puna { lock (lokerRadi) { if (!radi) { return; } } Dnevnik.PisiSaImenomThreda("Uspavan. Lista puna. Elemenata " + Lista.Count + "."); Monitor.Wait(lokerListe); Dnevnik.PisiSaImenomThreda("Probuđen. Lista je bila puna. Elemenata " + Lista.Count + "."); } Lista.Enqueue(strana); switch (Common.Korisno.Korisno.disciplina) { case Common.Korisno.Korisno.Disciplina.dPulse: Dnevnik.PisiSaImenomThreda("Budim slecećeg. Dodao element. Elemenata " + Lista.Count + "."); Monitor.Pulse(lokerListe); break; case Common.Korisno.Korisno.Disciplina.dPulseAll: Dnevnik.PisiSaImenomThreda("Budim sve. Dodao element. Elemenata " + Lista.Count + "."); Monitor.PulseAll(lokerListe); break; } } }
private void Obrada() { Dnevnik.PisiSaImenomThreda("Obrada pokrenuta."); try { while (radi) { ProcitajZaglavlja(); // malo logovanja string porukaOZavrsetku = String.Format("Thread {0} je završio sa dohvatanjem zaglavlja. Čekam da završe ostali pisci zaglavlja.", Pisac.Name); EventLogger.WriteEventInfo(porukaOZavrsetku); Dnevnik.PisiSaImenomThreda(porukaOZavrsetku); // sinhronizacija na barijeri if (barijera.PisacZaglavljaZavrsio() == 0) { brojacStranaZaglavlja.Ponisti(); } /*if (Common.BrojacPisacaZaglavlja.BrojAktivnihPisacaZaglavlja == 0) * { * brojacStranaZaglavlja.Ponisti(); * }*/ } } catch (Exception ex) { EventLogger.WriteEventError("Greska pri pokretanju obrade zaglavlja", ex); } Dnevnik.PisiSaImenomThreda("Obrada završena."); Dnevnik.Isprazni(); }
/// <summary> /// Starter procedura za Thread. Ona poziva proceduru RadiObradu u kojoj se izvrsava petlja obrade. /// </summary> private void Obrada() { Dnevnik.PisiSaImenomThreda("Obrada pokrenuta."); try { RadiObradu(); } catch (Exception ex) { Common.EventLogger.WriteEventError("Greska u RadiObradu().", ex); } Dnevnik.PisiSaThredom("Obrada završena.", true); }
protected override void OnStop() { obrada.Stop(); obrada = null; string poruka = "Servis je zaustavljen."; EventLogger.WriteEventInfo(poruka); Dnevnik.PisiSaImenomThreda(poruka); Dnevnik.Isprazni(); base.OnStop(); }
public void DodajMem(Automobile automobil, string threadName) { lock (lokerListeAutomobila) { Lista.Add(automobil); TimeSpan ts = DateTime.Now.Subtract(vremeSnimanja); if (ts.Minutes >= limitSnimanjeMinuti && Lista.Count >= limitSnimanjeRedovi) { SnimiCSV("c:\\temp\\" + threadName + "_" + DateTime.Now.ToString().Replace(":", "_") + ".csv"); vremeSnimanja = DateTime.Now; Dnevnik.PisiSaImenomThreda("Snimljen CSV."); } } }
public void NeRadi(string koJeZvao) { lock (lokerRadi) { if (radi) { radi = false; lock (lokerListe) { Dnevnik.PisiSaImenomThreda(string.Format("Budim sve! (zaustavljanje-zaglavlja) /{0}/", koJeZvao)); Monitor.PulseAll(lokerListe); } } } }
protected override void OnStart(string[] args) { base.OnStart(args); // Da li je ovo potrebno? //pozovi thread obrada = new GlavnaObrada(null); try { string poruka = "Pokrecem servis."; //EventLogger.WriteEventInfo(poruka); Dnevnik.PisiSaImenomThreda(poruka); obrada.Start(); poruka = "Servis je pokrenut.\n" + obrada.ToString(); EventLogger.WriteEventInfo(poruka); Dnevnik.PisiSaImenomThreda(poruka); } catch (Exception ex) { string poruka = "Nisam uspeo da pokrenem servis."; EventLogger.WriteEventError(poruka, ex); Dnevnik.PisiSaThredomGreska(poruka); } }
protected override void RadiObradu() { while (radi) { Strana strana = procitaneStrane.Uzmi(); // base property, strane zaglavlja. //Console.WriteLine(strana.Adresa); // if (strana != null) { List <string> adreseOglasa = strana.DajAdreseOglasa(); if (adreseOglasa != null) { if (adreseOglasa.Count != 0) { foreach (string adresa in adreseOglasa) { Strana stranaOglasa = new StranaOglasa(adresa); procitaneStraneOglasa.Dodaj(stranaOglasa); if (!radi) { return; } } Dnevnik.PisiSaImenomThreda("Obrađeno je zaglavlje: " + strana.Adresa); } else { brojacStranaZaglavlja.Ponisti(); } } else { Dnevnik.PisiSaThredomGreska("Nije obrađena strana zaglavlja: " + strana.Adresa); } } } }
private void ProcitajZaglavlja() { Common.BrojacPisacaZaglavlja.UvecajBrojAktivnihPisacaZaglavlja(); uint i; string adresa; i = brojacStranaZaglavlja.Sledeci(); try { adresa = DajAdresuZaglavlja(i); Common.Http.Strana strana = new Common.Http.StranaZaglavlja(adresa); while (strana.Procitaj()) { procitaneStrane.Dodaj(strana); // dodaje u deljenu listu u memoriju if (!radi) { return; } i = brojacStranaZaglavlja.Sledeci(); adresa = DajAdresuZaglavlja(i); strana = new Common.Http.StranaZaglavlja(adresa); } Dnevnik.PisiSaImenomThreda("Više nema zaglavlja za čitanje."); //brojacStranaZaglavlja.Ponisti(); // ponistavam brojac da krene iz pocetka ??????? } catch (Exception ex) { string porukaGreske = "Citac zaglavlja nije uspesno zavrsio."; EventLogger.WriteEventError(porukaGreske, ex); Dnevnik.PisiSaImenomThreda(porukaGreske); } finally { Common.BrojacPisacaZaglavlja.SmanjiBrojAktivnihPisacaZaglavlja(); } }