Új hozzászólás Aktív témák
-
tototos
őstag
válasz FehérHolló #1750 üzenetére
Hali.
Köszi a választ. Fél évet tanultam egyetemen C#-t meg többszálú alkalmazást is írtam. A kártyát is ismerem nagyjából. Írok privit.
-
Gregorius
őstag
válasz FehérHolló #1750 üzenetére
Ha itt egy termelő-fogyasztó patternt kellene megoldani, ahhoz inkább a ConcurrentQueue<T>-t kellene használni. Ld. még System.Collections.Concurrent.
-
FehérHolló
veterán
válasz Gregorius #1752 üzenetére
Mindjárt megnézem. Értelmesnek hangzik. Én anno linkedlist-tel oldottam meg, a kölcsönös kizárást meg egy autoresetevent (ha karod, szemefor) valósította meg.
Szerk.: Én .NET 3.5-ben dolgoztam, ez 4.0. Hasznos cucc. Köszi!
[ Szerkesztve ]
Skynet is real. It's called Google.
-
FehérHolló
veterán
válasz FehérHolló #1753 üzenetére
Hogy őszinte legyek, pont egy ilyen működést megvalósító osztályt kreaáltam a probléma megoldására... Queue + eventtel kölcsönös kizárás.
Skynet is real. It's called Google.
-
tototos
őstag
válasz Gregorius #1752 üzenetére
Köszi ez nagyon jól hangzik. Szóval amikor megjön az üzenet akkor bepakolom és a másik oldalt pedig csak folyamatosan olvasom és ő várakozik mindig ha üres. Ha egymás után gyorsan jönnek az üzenetek akkor sem fog megszakítást generálni gondolom hanem szépen feldolgozhatom az üzeneteket.
-
FehérHolló
veterán
válasz tototos #1755 üzenetére
Ez körülbelül arra jó, hogy egy puffert threadsafe módon kezel. Tehát egyszerre csak egy szál férhet az osztály egyes példányaihoz hozzá. Megspórolja egy csomó munkádat, átláthatóbbá teszi a kódot.
Más: Úgy látszik, nem igazán tudtam helyesen írni az előbb. Pedig még nem is ittam szinte semmit. Szóval bocs.
Skynet is real. It's called Google.
-
tototos
őstag
válasz FehérHolló #1756 üzenetére
hmm, lehet késő van már és fáradt vagyok. Szóval a kártya szálljában pakolom bele az üzeneteket, majd a protocol szálljában meg szedem ki, és adom tovább a függvényeknek. Ha kiürült a puffer akkor vár az üzenetre és ha bekerült egy akkor megint kiolvassa vagy nekem kell erről gondoskodni? Szóval megúszhatom a szálak közti jelzést?
-
FehérHolló
veterán
válasz tototos #1757 üzenetére
Így első nekifutásra ha a ConcurrentQueue-t használod, akkor valamivel meg kell fognod a fogyasztó (nálad protokoll) szálat üres queue esetén, különben megzabálja a procit üresjáratban.
Ha blokkolni is szeretnél, akkor szerintem (megint első nekifutásra) hasznosabb lehet a BlockingCollection osztály. Ez blokkolja a fogyasztó (protokoll) szál futását üres queue, a termelő (kártya) szálat pedig teli puffer esetén.De szerintem jobban jársz, ha megvárod Gregorius válaszát. Ő nagyon nagy valószínűséggel jobban ért a .NET 4.0-hoz.
És igen, elég késő van.
[ Szerkesztve ]
Skynet is real. It's called Google.
-
Gregorius
őstag
válasz FehérHolló #1758 üzenetére
Ha jól látom, a BlockingCollection<T> az egy wrapper a ConcurrentQueue fölött, úgyhogy ha blokkoló viselkedésre van szükség, akkor ez a megoldás.
Továbbá ha nem szigorú követelmény, hogy a feladatokat érkezési sorrendben kell megoldani, akkor még ajánlanám a Task Parallel Library áttanulmányozását (TaskFactory.StartNew, stb). Ezzel pofonegyszerű több szálra szétpakolni a feldolgozást. -
SebajTobias
tag
Sziasztok lenne egy kis problémám.
A lényeg, hogy felkértek, hogy csináljak egy kis cégnek egy kis nyilvántartó progit, ami vezeti ki mennyit dolgozik, órabéreket, ki melyk projekten van stb. Én nem nagyon értek ilyesmihez, de régi ismerős nagyon eröltette.
Arra gondoltam, hogy csinálok egy adatbázist (access-est), amihez csinálok egy .NET-es felületet, amin kezelgetik az adatbázist. Eddig nagyából meg is volnék, csak ugye nem mindenki láthat mindent Pl alkalmazott a főnök fizuját stb. Plusz még egy rakás lekérdezés is futatható, és nem mindenki futtathat bármit. És itt lenne a bajom.
Az adatbázisba (Accessben) létrehoztam felhasználói csoportokat, és ott beállítottam, hogy ki mit csinálhat. A honlapon pedig van egy bejelentkező oldal, ahol belépnek a dolgozók.
Hogyan tudom összekapcsolni az adatbázis jogosultságait a honlapéval?
Vagy ez két külön dolog?
Ha nem adok az adatbázisnak jogosultságokat, akkor ugye valaki csak megnyitja Access-el, és belekukkanthat. De a honlapon se tudjon belepiszkálni ill. lekérdezéseket futtatni, csak azokat ami rá tartozik..
Remélem érthető voltam, ha van valami ötlet légyszi írjátok meg.
Köszi -
ArchElf
addikt
válasz SebajTobias #1761 üzenetére
Ezt találtam:
http://www.litwindow.com/Knowhow/HowTo/howto_create_secure_access_dat.html
Ugyan c++-ra készült, de egy kis utánajárással megvalósítható c# alatt is szerintem.Összekapcsolásra: kellenek Access-en létrehozott userek, amivel a felhasználók belépnek (Access azonosítja majd őket). A felhasználó egy login képernyőn megadja az azonosítót és a jelszót, a webalkalmazás pedig megpróbál JET-en keresztül kapcsolódni az access adatbázishoz az adatbázishoz tartozó mdw-n keresztül. Ha a felhasználók számára az mdw nem elérhető, akkor nem fogják tunk megnyitni az mdb-t sem (bár ha web-es progi, akkor az mdb-t sem fgják úgysem elérni...)
AE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
killerjohn
addikt
Sziasztok!
Egy röpke kérdés, miután már agyamra megy a VS2010...
Van egy meglehetősen nagy solution, benne ~40 nem túl nagy projekttel.
A Rebuild kb 30 másodpercig tart, 4db RAID0+1-be kötött SSD-n, 3.6 GHz-re húzott quadcore gépen. Rohadjak meg ha értem...Ez azért van, mert csak 1 szálon fordít a VS (25% CPU használat).
Viszont ha nem "F6"-olok, hanem egy batch fájlban ezt futtatom:
c:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /ponfiguration=Release /maxcpucount:4 /detailedsummary /verbosity:Minimal /fileLoggerParameters:LogFile=build.log;Verbosity=Normal;Encoding=UTF-8 /Targetebuild wsprojects.slnNos, akkor nem 35, hanem 14 másodperc alatt végez, 100% cpu használat mellett...
Szépen felismeri, hogy mik a függőségek, és ügyesen, megfelelő sorrendben lefordítja az egészet.Azt én megértem, hogy az Output ablak miatt (ne keveredjenek össze a sorok) egyszerre csak 1 projektet fordít, de erre nincs valami megoldás? Nem érdekel az Output, komolyan!
A beállításoknál a "maximum number of parallel project builds"-ben 4 van, de nem igazán foglalkozik vele, és azt olvastam, hogy csak a C++ használja.
Előre is köszi!
-
RedSign
tag
Sziasztok!
VS2008-ban írtunk egy (3.5 framework) programot C#-ban, amit le is fordítottunk Windows XP SP3 alatt és az exe file egy másik gépen (azonos oprendszer) ment is gond nélkül. A kérdés annyi lenne, hogy mennyi az esélye más Windows XP SP3-as gépeken? Az aggaszt igazából, hogy egy net nélküli gépen SP3-mal valamilyen hiányzó/nem frissített dll miatt futtatási gond lehet...
Üdv,
RedSignhttp://www.redsign.hu
-
wasyster
csendes tag
Segitseg kellene, vagy utirany ket dolgoban.
Az elso, megirtam egy progit ami SQL adatbazist hasznal. Az erdekelne hogy C# hogy lehet, feltetelezem lehet, azt lekodolni, hogy a progi automatikussan nezze meg hogy egy adott adatbazis csatolva van e az SQL serverhez, es ha nincs akkor csatolja azt a program root konyvtarabol.A masodik gond az lenne, hogy a program Reportokat general, amik DataSet-bol taplalkoznak, de ezeket a DataSet-eket LINQ2SQL-al toltom fel (nem epp a legjobb kifejezes). Ez mind szepen dolgozik, de mikor kelepsz a programbol akkor valami osszeakada SVCHOST.exe -vel. Hiaba debagolom, nem latom mivel. Mint hibat kiirja, hogy megprobaltam "unload" valamit a memoriabol ami ezt a hibat okozza.
koszi
-
tototos
őstag
Sziasztok.
Melyik metódus hívódik meg amikor a formon az X-re kattintok? Sajnos nem akar a program bezáródni amikor a formot bezárom, nem tud egy szálat lelőni.
-
FehérHolló
veterán
válasz Lortech #1769 üzenetére
Az mennyire egészséges, ha erről a már háttérben futó szálról soha többé nem derül ki, hogy hibásan fut? :-)
Sőt, a program bezárása után már csak oprendszer szinten lehet majd lelőni.Másrészt szerintem érdemesebb lenne a Closed eseményt nézni. ([link])
Skynet is real. It's called Google.
-
Lortech
addikt
válasz FehérHolló #1770 üzenetére
A daemon threadet pont azért ajánlottam, hogy le tudja állítani normálisan az alkalmazást, le fog állni az ilyen thread, ha a többi fő thread is leállt. Szó nincs arról, amikről írsz.
A válasz az volt, amit írtam + az első link, a form closingot csak úgy mellékesen linkeltem, a megoldáshoz nincs rá szükség.Thank you to god for making me an atheist
-
FehérHolló
veterán
válasz Lortech #1771 üzenetére
Tudom, hogy miért ajánlottad. Ettől függetlenül nagyságrendekkel nehezebb lesz a háttérbe pakolt szál debugolása. Másrészt teljesen mindegy, hogy az oprendszer, vagy a futtató környezet lövi le, mindkét esetben kicsúszik a kezedből. (Nem azért, mert te nem tutod abortálni, hanem azért ,mert ezek után nem is fog érdekelni, hogy abortálnod kéne.)
Sokkal tisztább az, ha a form closing/closed eseménynél lekezeli az összes szálat.
Szóval van szó arról, amit írtam.[ Szerkesztve ]
Skynet is real. It's called Google.
-
Lortech
addikt
válasz FehérHolló #1772 üzenetére
De akkor mi volt az, hogy idézem: "már csak oprendszer szinten lehet majd lelőni", valamint "ha erről a már háttérben futó szálról soha többé nem derül ki, hogy hibásan fut" ?
-Hogy háttérszál-e vagy sem, nincs relevanciája a debugoláskor.
-"Nem csúszik ki a kezedből", ha nem akarod.
A background thread továbbra sem különbözik semmiben egy foreground száltól, kivéve abban, amiről szó van, hogy nem fut tovább a processz miatta, ha az utolsó nem háttérszál leáll. A megfelelő thread cleanupot biztosítani kell ezektől függetlenül, mint ahogy a normál leállást is preferálni kell (thread értesül róla, hogy le kell állnia és leáll, ha van rá idő vagy kritikus megvárni).
Ha valami egzaktabb érvek mentén folyna a diskurzus, akkor lehet, hogy hamarabb dűlőre jutnánk.[ Szerkesztve ]
Thank you to god for making me an atheist
-
FehérHolló
veterán
válasz Lortech #1773 üzenetére
A megfelelő thread cleanupot biztosítani kell ezektől függetlenül, mint ahogy a normál leállást is preferálni kell (thread értesül róla, hogy le kell állnia és leáll, ha van rá idő vagy kritikus megvárni).
Igen, ezt erőltetem. A lényegben tehát egyetértünk. Csak abban nem, hogy szerintem a kérdéses problémát csak a szőnyeg alá söpri a te megoldásod. Ha "rendesen kitakarít" a programozó, akkor semmi szükség rá. Kényelmi funkció, ami szerintem túlzottan óvatlanná teheti az egyszeri halandót.Debugolásról meg annyit, hogy tegyük fel, hogy normál módon akarod leállítani a szálakat, szerinted mindent megtettél ennek érdekében. Ha a háttérben futtatod a szála(ka)t, akkor viszont soha nem fog kiderülni (vagy csak vért izzadás árán) az ellenkezője. Tehát nem/nehezebben jössz rá, hogy mégsem úgy működik valami, ahogy eltervezted.
Konkrét probléma nélkül elég nehéz egzaktabbá tenni a beszélgetést. Én úgy érzem, hogy megértettem a te álláspontodat. Részben egyet is tudok érteni veled. Azonban én hasonló esetben (nagy általánosságban) nem fogom használni a megoldásod a fenti érvek miatt. Mások pedig cselekedjenek a saját belátásuk szerint.
[ Szerkesztve ]
Skynet is real. It's called Google.
-
Lortech
addikt
válasz FehérHolló #1774 üzenetére
Debugolásról meg annyit, hogy tegyük fel, hogy normál módon akarod leállítani a szálakat, szerinted mindent megtettél ennek érdekében. Ha a háttérben futtatod a szála(ka)t, akkor viszont soha nem fog kiderülni (vagy csak vért izzadás árán) az ellenkezője. Tehát nem/nehezebben jössz rá, hogy mégsem úgy működik valami, ahogy eltervezted.
Nem pont erre asszociáltam debugolás kapcsán, de azt hiszem, értem mire gondolsz.
Adott esetben nem feltétlenül van jelentősége, hogy a thread hogy ért véget, mert pl. épp csak monitorozott valamit és nem érdekes, hol állt meg, vagy a gui thread nélkül nincs is értelme tovább futnia, vagy hosszan fut egy-egy tevékenység benne, és nincs idő megvárni, amíg rájön, hogy le kell állnia. Mit csináljon, várjon egy percet amíg befejezi (remélhetőleg) és eljut a következő szálban maradási ellenőrzésig? De lehet, hogy a felhasználó nem szeretné megvárni, hanem kikapcsolja a gépet, és végül fogalmunk sem lenne így sem, hogy mi történt. Vagy pedig ilyen esetben engeded kimúlni background threadként, és lekezeled a threadabortexceptiont és kilogolod a megfelelő infókat.
No de visszakanyarodva az eredeti kérdésre, ha más lett volna a kontextus, akkor nem az isBackgroundot ajánlom elsőkörben. A kérdésből úgy tűnt, hogy nem cél kontrollálni a threadet, nem cél bármi cleanupot elvégezni, csak pusztuljon a szál a processzel együtt - mivel eleve csak akkor merült fel az egész kérdés, mikor már kiderült, hogy valami nem klappol, nem áll le a processz. Persze ez lehet, hogy a körültekintés hiányából fakad, és nem tudatos.Thank you to god for making me an atheist
-
killerjohn
addikt
válasz killerjohn #1763 üzenetére
up
-
bpx
őstag
válasz killerjohn #1776 üzenetére
a problémára nincs megoldásom, de miért akarod rebuildelni a komplett solutiont minden egyes alkalommal és nem csak azt az 1 projektet, amit módosítottál?
[ Szerkesztve ]
-
tototos
őstag
Sziasztok.
Egy formnak hogy tudom megadni a szülő formját? Azt szeretném használni, hogy van egy mainform majd megjelenítek egy másik formot és az pontosan a mainform közepén jelenjen meg, láttam hogy van ilyen property.
-
RedSign
tag
Sziasztok!
Egy problémával kapcsolatban kérnék segítséget, mert amikkel ezzel próbálkoztam nem hoztak sikert.
Innen töltöttem le az osztályt a webcam kezeléséhez:
http://www.c-sharpcorner.com/UploadFile/yougerthen/810262008070218AM/8.aspxSzépen működik is, de szeretnék a képre rajzolni, ha a kamera megy - az alap formot hoztam létre ami a fenti linken szerepel - de eddig hiába próbálkoztam a pictureBox1 CreateGrpahics-szal létrehozott felületre rajzolni vagy a camera közvetlen Containeréből létrehozott felületre, csak akkor jelent meg a vonal (egyenlőre teszt), ha nem ment a kamera...
Graphics gr = this.pictureBox1.CreateGraphics();
Pen pen = new Pen(Color.Yellow, 4F);
gr.DrawLine(pen, 20, 20, 100, 100);Tudna valaki segíteni?
Előre is köszönöm!!!
RedSign
http://www.redsign.hu
-
kingabo
őstag
válasz RedSign #1779 üzenetére
Hali!
Ha jól emlékszem a draw eseményre kell felíratkozni, ekkor kapsz egy graphics példányt is. A probléma szerintem az lesz, hogy a Te rajzolásod hamarabb lefut, mint a fenti draw, ezért ha van a webcam-nek képe, akkor azt rárajzolja a rajzodra.
(#1778) tototos: öröklődés? Létrehozol egy saját form osztályt, ami a Form-ból származik és lesz még egy plusz adattagja, ami a szűlőjére mutat.
[ Szerkesztve ]
-
kingabo
őstag
válasz RedSign #1785 üzenetére
Paint az esemény és onPaint a hozzá kapcsolódó automatikusan elnevezett esemény kezelő. Ha lenne webcam-em megpróbálnám hátha rájövök hol veszik el a kép, de így nem fog menni
(#1784) tototos: hirtelen ezt találtam: [link] Úgy látom csak ShowDialog-ra műxik sima Show-ra nem. Alul a hsz-ben van erre 1 megoldás!
-
kingabo
őstag
-
RedSign
tag
válasz kingabo #1787 üzenetére
Igen hasonló módon, de sajnos ha a kamerát bekapcsolom az OpenConnectionnel, akkor a kép eltűnik (előtte ott van) és csak a kamera képe marad... ha leállítom, akkor visszatér a kép...
Igen lehet, mert ott van onPaint...
Hm, nem lehet hogy az a gond amit a camera kódjában olvasok?
// Create a child window with capCreateCaptureWindowA so you can display it in a picturebox.
[ Szerkesztve ]
http://www.redsign.hu
-
tototos
őstag
Köszönöm az eddigi segítséget. Még egy kérdés, hogy tudok olyat csinálni hogy egy textboxba akarok kiírni egy fájl címét, és ha túl hosszú a cím akkor középen ...-tal elválasztja majd amikor fölé viszem az egeret a teljes címet kiírja.
-
RedSign
tag
válasz RedSign #1788 üzenetére
Közben kicsit áthidalásos módon, de sikerült megoldanom...
Csináltam egy pictureBox2-öt a formra, majd egy timerrel folyamatosan meghívom a pushImage függvényét a webcam-omnak, ami a SaveImage alapján így néz ki:
public void pushImage(object sender)
{
Image flsh;
IDataObject data;
PictureBox kep = sender as PictureBox;
SendMessage(hHwnd, WM_CAP_EDIT_COPY, 0, 0);
data = Clipboard.GetDataObject();
if (data.GetDataPresent(typeof(System.Drawing.Bitmap)))
{
flsh = (Image)data.GetData(typeof(System.Drawing.Bitmap));
kep.Image = flsh;
}
}http://www.redsign.hu
-
tototos
őstag
Sziasztok.
Szeretnék a programomhoz egy progress bart megjeleníteni amikor hoszabb utasítás fut. Tehát van a mainform, majd amikor rákattintok egy gombra akkor felugrik a prgress bar és rataja fut a csík addig amíg a feladat be nem fejeződik, és a mainformra pedig nem lehet kattintani.Erre a legjobb megodásként a showdialog függvényt találtam. Létre is hoztam egy formot és rádokkoltam egy progress bart. Csak az nem tudom pontosan hol kellene szálat létrehozni és hogy lehetne hívni a shiwdialog függvényt hogy utána le is lehessen állítani. Tudtok ebben segíteni? Olyan hibába ütköztem hogy a showdialagból soha nem akart kilépni mert ugye nem kattintok semmire a frmon, manuálisan szeretném leállítani.
-
kingabo
őstag
válasz tototos #1793 üzenetére
Hali!
BackgroundWorker-rel sokkal könnyebb lenne megoldani, illetve a gombra kattintáskor le kell tiltani az összes formon lévő gombot és nem tud a lyúzer semmire sem kattintani. Vagy ha a gombletiltás nem tetszik, akkor egy bool változót kell deklarálnod a form-hoz, ha elkezdesz számolni igazra állítod, ha vége, akkor false-ra és minden gomb click esemény kezelőjében megvizsgálod, hogy a változó false-e, ha nem(vagyis számolsz), akkor return.
-
kingabo
őstag
válasz tototos #1798 üzenetére
Na megírtam a progit nem nagyzolás miatt csak, hogy tudjak segíteni ha elakadsz/ne ajánljak hülyeséget, nem akarnám 1:1-ben odaadni, inkább jöjj rá a dolgokra Te! (nem szivatásból, csak sok buktató van, amit jó ha magad is megtapasztalsz, így késöbb tudni fogod, hogy hogyan kell megoldani) De igaziból azt is jó lenne tudni, hogy mit tanultál, meg mennyi van meg.
Nagyjából így oldottam meg: gombra katt, ami létrehoz egy új thread-et és feldobja az ablakot, ebben a thread-ben nagy számítás szimulálására létrehozok egy timert, aminek a tick eseményére megnövelem a másik formon a progressbar értékét. Hogy a lyúzer ne tudja kilőni felíratkoztam a formclosing eseményre, ennek az eseménykezelőjében, ha nem végeztem a számolással, akkor az e.Cancel = true; utasítással nem engedem, hogy bezárja. Ha végeztem a számítással bezárom az ablakot.
Ha valamit nem értesz, kevés,... kérdezz nyugodtan.[ Szerkesztve ]
-
tototos
őstag
válasz kingabo #1799 üzenetére
Végül nekem is sikerült. Nagyon köszi hogy megcsináltad.
Nálam úgy néz ki hogy van a főszál, ebből meghívok egy backgroundworkert ami az adott feladatot futtatja, pl program letöltés vagy hardver init. Ez után elindítok egy másik szálat ami a progress baron fogja futtatni a a csíkot, majd a főszálból meghívom a progressform.showdialog(this) parancsot. Erre a parancsra figyeljetek mert addig benne van míg be nem zárjuk a formot, tehát magát a főszálat teljesen megfogja. Na és Amikor a backgroundworker végzett akkor az ő eventje peidg bezárja a formot és lelövi a szálat.
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Kínai, és egyéb olcsó órák topikja
- Elektromos (hálózati és akkus) kéziszerszámok, tapasztalatok/vásárlás
- Star Trek Online -=MMORPG=-
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Volkswagen ID.7 menetpróba
- E-roller topik
- Számtech boltosok memoárjai, azaz amikor kiborulunk...
- Nothing Phone (2) - több, mint elsőre látszik
- Milyen SSD-t vegyek?
- Kerékpárosok, bringások ide!
- További aktív témák...
- Gamer Gép 3090/Ryzen 7 570 x
- Meross MSS210 intelligens aljzat Homekit kompatibilis 4 darab
- Logitech K811 bluetooth vezetéknélküli billentyűzet Mac-hez, háttérvilágitással, angol nyelvű
- Meross MSS315MA-EU intelligens aljzat energiamérő funkcióval (Matter / Homekit) 4 darab
- Asus X54SA notebook 15.6" HD Pentium 4GB RAM 240GB Kingston SSD magyar bill., DVD-olvasó