Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Richter
Thema: Wie Thread der socket.Receive ausführt beenden?
Am im Forum: Netzwerktechnologien

Ich habe eine (in meinen Augen nicht elegante) Lösung gefunden:

ich platziere ein

                while(sock.Available == 0)
                {
                    System.Threading.Thread.Sleep(100);
                }

vor das Recive.

Bitte dennoch um Ideen wie man es besser machen könnte :)

Thema: Wie Thread der socket.Receive ausführt beenden?
Am im Forum: Netzwerktechnologien

Hallo!

Ich lausche in meinem Programm einer Art Börsentickerstream. In meinem Fenster starte ich in der button_click(..) die Funktion StartBitcoinchartsTicker(). Diese startet nun in einem neuen Thread die bitcoinchartlistener() funktion die nun in einer Endlosschleife den Stream abhört. Der Thread wird gespeichert als ThreadX

Wenn ich mein Programmfenster schließe und damit das Programm beenden will, dann "lebt" bitcoinchartslistener einfach weiter. Auch ein ThreadX.abort() bringt nichts. in der Receive funktion kommt dieser Befehl sich zu beenden wohl nicht zur ausführung.

Wie kann ich mein Programm vollständig beenden?


Ich habe folgenden Code:


static bool isBitcoinchartsTickerRunning = false; 
        public static System.Threading.Thread StartBitcoinchartsTicker()
        {
            if (isBitcoinchartsTickerRunning == false)
            {
                return run(() => { bitcoinchartlistener(); });
            }
            return null;
        }

        static BitCoinChartsData bitcoinchartlistener()
        {
            Socket sock = null;
            IPHostEntry hostEntry = null;

            hostEntry = Dns.GetHostEntry("bitcoincharts.com");

            // Nutze die Eigenschaft AddressFamily von IPEndPoint um Konflikte zwischen
            // IPv4 und IPv6zu vermeiden. Gehe dazu die Adressliste mit einer Schleife durch.
            foreach (IPAddress address in hostEntry.AddressList)
            {
                IPEndPoint ipo = new IPEndPoint(address, 27007);
                Socket tempSocket = new Socket(ipo.AddressFamily,
                                               SocketType.Stream,
                                               ProtocolType.Tcp);

                tempSocket.Connect(ipo);

                if (tempSocket.Connected)
                {
                    sock = tempSocket;
                    break;
                }
                else
                {
                    continue;
                }
            }


            Byte[] bytesReceived = new Byte[94096];

            // Instanziere ein gültiges Socket Objekt mit den übergebenen Argumenten

            if (sock == null)
            {
                if (OnError != null)
                {OnError("Could not connect to Bitcoinchart-Datastream");}
            }

            isBitcoinchartsTickerRunning=true;

            int bytes = 0;
            // Empfange die Daten und konvertiere sie
            do
            {
                bytes = sock.Receive(bytesReceived, bytesReceived.Length, SocketFlags.None);

                // kovertiere die Byte Daten in einen string
                //page = page + Encoding.ASCII.GetString(bytesReceived, 0, bytes);
                if(OnNewBitcoinchartData!=null)
                {
                    string JSON = Encoding.ASCII.GetString(bytesReceived, 0, bytes);
                    string[] JSONs = JSON.Split(new string[]{"\0"},StringSplitOptions.RemoveEmptyEntries);
                    foreach(string JS in JSONs)
                    {
                        JS.Replace("\0","");
                        OnNewBitcoinchartData(new BitCoinChartsData(JS));
                    }
                }
            } while (bytes > 0);

            // Unterbinde alle weiteren Send() und Receive() Aktivitäten am Socket
            sock.Shutdown(SocketShutdown.Both);
            sock.Close();
            if (OnError != null)
            { OnError("Could not connect to Bitcoinchart-Datastream"); }
            isBitcoinchartsTickerRunning = false;
            return null;
        }

Thema: Long Random Zahl
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo!

Ich brauche eine Long Zufallszahl! Standardnetrandom gibt leider nur Ints zurück....

Also schaffe ich durch Multplikation ein long. Das erscheind mir aber sehr "teuer"

Geht es irgendwie besser als das:


(((long)int.MaxValue) * LocalRnd.Next()) + LocalRnd.Next()

Ich glaube auch, dass ich nicht den Kompletten Zahlenbereich eines Long abdecke, stimmt das?

Thema: Probleme mit Random auf Multicore
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Weil das Cool ist! ;)

Ich habe mehrere Kartendecks gleichzeitig, nicht eines an dem Parallel herrum gedoktert wird...ich bin kein bloedie ;)

Das Seedarry entleert sich wenn parallel aus einer Randominstanz Zufallszahlen erzeugt werden. Ich denke es pasiert Folgendermassen:

Thread ruft auf Core 1 rnd.Next() auf. Mitten in der Erzeugung wechselt der Thread von Core 1 auf Core 2 dabei *mysterioese hexenmagie * teil des Seedarrys ist verloren. Wenn das oft genug passiert, ist das Seedarry irgendwann nur noch mit Nullen gefuellt, ergo werden nur noch Nullen zurueck gegeben. Wenn ich viele Randominstanzen habe, verkleiner sich die Gefahr, da diese auch nur eine Begrenzte Lebensdauer haben und nicht so lange leben wie ein Thread!

Das ist alles recht schmutzig, fuer ein Privatprojekt aber ausreichend ;D

Pro Thread konsistent sollte soviel bedeuten, wie alles was im Threat passiert ist save. Besser waere vielleich In thread konsisten...naja nicht wichtig.

Mein Code ist nicht schoen aber dafuer selten :P

Thema: Probleme mit Random auf Multicore
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das äußert sich, indem irgendwann nur noch Nullen zurück gegeben werden. Das Seedarray entleert sich. Man kann nicht einfach hoffen das alles Pro Tread konsistent ist! Denn auch dann gibt es noch Seiteneffekte! Dies ist sogar auf einem Singlecore möglich wenn aus mehreren Threads auf eine Variable zugegriffen wird. Manchmal kommen die Daten dann eben aus dem Cach und manchmal aus dem Ram! Dadurch gehen Updates verloren! ähnliches scheint bei 2 Cores und einem Thread zu passieren. Oder ist dies Unmöglich? ich glaube leider nicht.

Ich benutze die Zufallsgeneratoren um einen Spielkartenstapel für ein Pokerspiel zu simmulieren.

Das ist wohl die Kritiche Stelle:


int CallWin = (from a in ParallelEnumerable.Range(0, Params.SerchStructure[Params.Level]) select WinningOfMove(eMove.Call, GameState.Clone(), this.Clone(), Stats.Clone(), BetterHands.Clone())).Sum();

In WinningOfMove Brauche ich dann jeweils die Zufalszahlen. Sonst ist nichts Nebenläufig

Wie man sieht, nichts Weltbewegendes, alles hat seine eigenen Instanzen.

Thema: Probleme mit Random auf Multicore
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

herbivore, deine Lösung funktionier zumindest bei meinen Tests nicht!
Ich vermute es kommt durch den Prozessorcach zu Unstimmigkeiten, da der Thread unsinniger Weise von Core zu Core springt und alles ein wenig inkonsitent sein kann.

Es braucht also vorsichtshalber trozdem jeweils eigenständige Instanzen um ganz auf Nummer sicher zu gehen. Und wahrscheinlich ist das auf sehr Lange sicht noch immer nicht ganz Sicher...

Ich wünsche mir die 90er mit immer schneller werdenden Singlecores zurück ;D

Thema: Probleme mit Random auf Multicore
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ist diese Lösung so relativ Optimal?

 [ThreadStatic]
        static private Random rnd;

        static Random MasterRnd = new Random();         
        public static Random GetGoodRandomMT()
        {
            
            if (rnd == null)
            {
                Console.WriteLine("HAHAHHAHAHAAAA!");
                lock (MasterRnd)
                {
                    rnd = new Random(MasterRnd.Next());
                }
            }
            return new Random(rnd.Next());
         }

Kann man sich irgendwie den Null-check sparen?

Danke für all eure Kompetente Hilfe!

Thema: Probleme mit Random auf Multicore
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo!

Ich habe einen Code in dem ich viele Zufallsgeneratoren brauche. Und damits schneller läúft ist alles mit Linq Parallelisiert.

Eine Instanz von Random ist ja nun nicht threadsave. Und zu allen übel, wenn man viele Instanzen in kurzer Zeit erstellt, sind sie alle gleich. Meine Lösung für das Problem sieht so aus:

static private Random rnd = new Random();
        static Dictionary<int, Random> PrivatRNDGenerators = new Dictionary<int, Random>();
        
        public static Random GetGoodRandomMT()
        {


            int ID = System.Threading.Thread.CurrentThread.ManagedThreadId;
            if(PrivatRNDGenerators.ContainsKey(ID))
            {
                return PrivatRNDGenerators[ID];
            }
            lock (rnd)
            {
                Console.WriteLine("AHA!");
                PrivatRNDGenerators.Add(ID,new Random(rnd.Next()));
                return PrivatRNDGenerators[ID];
            }
            throw new Exception("KA!");
                //return new Random(rnd.Next());
            //}
        }

Aber obwohl ich schön säuberlich nach threads trenne, gibt es Fehler, das heisst, die Instanzen in dem Dictionery geben nur noch Nullen statt Zufallszahlen zurück.

Woran kann das liegen?

Eine Funktionierende Lösung war:


        static private Random rnd = new Random();
        
        public static Random GetGoodRandomMT()
        {

            lock (rnd)
            {
                return new Random(rnd.Next());
            }
        }

Aber das ist zu langsam, da warten sich die Threads tot...

Thema: Warum berücksichtigt GetHashCode() von int [] nicht den Inhalt des Arrays?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Danke, ich habe verstanden!

Thema: Warum berücksichtigt GetHashCode() von int [] nicht den Inhalt des Arrays?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wie der Titel schon sagt, warum gibt GetHashCode eines Integerarrays immer etwas anderes zurück, obwohl alle Elemente zweier Arrays gleich sind?

Das hat sicherlich einen Logischen Grund, den ich gerne Verstehen würde!

Bei Strings funktioniert es doch auch! Und das sind ja quasi auch nur CharArrays?

Muss man solchen Lowlevelsachen bei den Standarddatentypen also immer erst Implementieren, wenn man irgend eine Datenstrucktur in einer Hashtable als Key nutzen will?

Thema: EXE Programm mit Passwort schützen
Am im Forum: Rund um die Programmierung

if(Console.ReadLine()!="DeinPW")
return

Thema: Fast and Simple Bitmap Filter
Am im Forum: Projekte

Hallo!

Etwas in der Art müsste doch auch sehr Schnell sein!?!


        public struct Pixel
        {
            public byte B;
            public byte G;
            public byte R;
        }

System.Drawing.Imaging.BitmapData bd = bmp.LockBits(new Rectangle(0, 0, bmp.Size.Width, bmp.Size.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            
            int xsize = bmp.Size.Width;
            int ysize = bmp.Size.Height;

            unchecked
            {
                unsafe
                {

                    Pixel* p1 = (Pixel*)bd.Scan0.ToPointer();
                    
                    for (int i = (ysize*xsize); i > 0; i--, p1++)
                    {
                        p1->R= 255-p1->R;
                        p1->G= 255-p1->G;
                        p1->B= 255-p1->B;

                    }

                }
            } 

Vielleicht hat ja jemand lust das zu Benchmarken?
Ich glaube kaum, dass es viel langsamer als die neue Methode ist, dafür aber leider unsave^^

Thema: Java C# Wrapper?
Am im Forum: Rund um die Programmierung

Es gibt eine Implementierung des compact net für Symbian, vielleicht hilft dir das ja auch schon:

http://www.redfivelabs.com/

Für private zwecke glaube kostenlos!

Thema: Randomplayer, makes you the new Michael Jackson!
Am im Forum: Projekte

Keine Ahnung. Das sind Midi-Befehle, die die Töne erzeugen. Du kannst sicherlich irgendwo in den Einstellungen deines PCs regeln, wie Midis wiedergegeben werden.

Thema: Randomplayer, makes you the new Michael Jackson!
Am im Forum: Projekte

das ist der Debug-Ordner^^

Eigentlich geht es mir um automatische Musikgeneration, wahrscheinlich mit Hilfe von Neuronalen Netzen. Dafür hab ich nur die Grundlagen geschaffen :)

Thema: Randomplayer, makes you the new Michael Jackson!
Am im Forum: Projekte

Hallo!

Anbei mein neuestes Projekt, bei dem ich zur Zeit evaluiere, ob ich mehr Zeit hinein stecken werde.

Probiert es einfach aus.

Wenn euch gefällt, was ihr Hört, drückt eine beliebige Taste, wenn ihr aber die letzte Note verwerfen wollt, drückt "n".

Man hört nun immer wieder die letzten Sechs Noten. Und eine Neue, und muss entscheiden, ob diese Gut dazu passt.

Hat man 30 Noten zusammen, kann man sein Gesammtwerk anhören ;D

Ich finde, es macht Spaß damit Zeit zu verschwenden ;D

Thema: Problem bei einfachem auslesen aus Datenbank
Am im Forum: Datentechnologien

Ich danke euch für eure Hilfe!

Ich habe wohl wirklich irgend etwas nicht aktualisiert, bzw etwas war asynchron. Ich hab jedenfalls alles neu gemach und nun gings....die arbeit wars wert^^

Thema: Problem bei einfachem auslesen aus Datenbank
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: Compact Database 3.5 (oder so ähnlich^^)

Hallo!

Ich habe folgenden Code der die von VisualStudio 2008 erzeugten Klassen nutzt:


            holecardsTableAdapter holecardsTA = new holecardsTableAdapter();

            listView1.Items.Clear();
            System.Data.DataTableReader DTR=null;
            DTR = holecardsTA.GetAllHands(NamensListe.SelectedItem as string).CreateDataReader(); //ERROR
            while (DTR.Read())
            {
                listView1.Items.Add(DTR.GetString(1));
            }

An der markierten stelle kommt es zu folgendem Fehler:

Einschränkungen konnten nicht aktiviert werden. Mindestens eine Zeile enthält Werte die die Einschränkungen non-null, unique or foreign-key verletzen.

Hinter GetAllHands verbirgt sich das folgende:

SELECT     holecards.holecards
FROM         holecards INNER JOIN
                      spieler ON holecards.id_spieler = spieler.id_spieler
WHERE     (spieler.name = @name)

Ich versteh den Fehler nicht. :( Ich wäre für Tipps sehr dankbar. An den zwei Tabellen ist meiner Meinung nach nichts besonderes :(

Und wenn ich den sql-Code im Querybuilder ausführe funktioniert er !! Das verstehe ich am wenigsten :(

Hoffe ihr versteht mich und könnt mir helfen. Danke!

Thema: Suche Algorithmus zur Gruppierung von Punkten (Bild)
Am im Forum: Rund um die Programmierung

Deswegen vergleicht man ja den Abstand der neu Aufgenommenen Punkte auch mit den Restlichen!

Thema: Suche Algorithmus zur Gruppierung von Punkten (Bild)
Am im Forum: Rund um die Programmierung

Ist doch easy, irgend einen Punkt nehmen, und für jeden anderen Punkt den abstand berechnen. Alle Punkte die Nah genug sind kommen in die Liste Gruppe 1 plus Startpunkt. Nun vergleicht man noch jeden punkt in Gruppe eins mit den anderen, und findet so vielleicht neue Gruppe 1 Punkte.

Wenn nicht macht man Gruppe zwei auf und wählt neuen Zufälligen Punkt aus den verbleibenden. oder alle Punkte sind weg. Dann ist man fertig.

Wenn es nicht um Millionen Punkte geht, dürfte das auch schnell genug sein.

Thema: Künstliche Intelligenz - Ein neuer Fehlschlag
Am im Forum: Projekte

Hach, wunderbar, scheind mein Konzept, noch so dumm zu sein, ein Funken Wahrheit war wohl vielleicht doch dran ;)

Telepolis: Wir denken wie Maschinen (Link korrigiert)

Thema: Künstliche Intelligenz programmieren...?
Am im Forum: Rund um die Programmierung

Man kann nicht einfach so eine KI programmieren. Du musst uns schon sagen, welche Aufgaben dein Programm lösen soll! Denn je nach Problem, gibt es unterschiedliche Ansätze!

Thema: .NET User Group Chemnitz - 24.04.09
Am im Forum: Szenenews

Ich muss mal dumm Fragen: Kostet das den Besucher etwas?

Thema: Schach-KI "Battle"
Am im Forum: Projekte

Das schreit doch nach Go!

Ist sogar ein Forschungsschwerpunkt und nicht so ausgelutscht wie Schach und vier gewinnt!

Thema: Problem mit Linq und mehrdeminsionalem Array
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: ganz normales Array^^

Hallo!

Manchmal sagt Code mehr als tausend Worte ;D


int[,] test = new int[,] { { 2, 3, 4 }, { 5, 6, 7 } };
            var list = from num in test select num;


Und der passende Fehler:
Error 4 'int[*,*]' does not contain a definition for 'Select' and the best extension method overload 'System.Linq.Enumerable.Select<TSource,TResult>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TResult>)' has some invalid arguments
Error 5 Instance argument: cannot convert from 'int[*,*]' to 'System.Collections.Generic.IEnumerable<int>'


Ich will also mit Hilfe von Linq ein Mehrdim Array in ein eindimensionales Umwandeln. Warum geht das nicht? Wo is mein Denkfehler? Ich dachte man kann mit jedem Typ arbeiten, der IEnum... besitzt?

Danke für eure Hilfe :)

Thema: Künstliche Intelligenz - Ein neuer Fehlschlag
Am im Forum: Projekte

Nunja, ich entwickle mich (langsam) weiter^^ Früher hatte ich null schimmer, jetzt bin ich schon bei Prolog, eine Technik der 70er??

Wer weiß wo ich in 10 Jahren bin, wenn man bedenkt, dass ich mich doch erst seid 2-3 Jahren damit beschäftige ;D

Cool bleiben ;D

Thema: Künstliche Intelligenz - Ein neuer Fehlschlag
Am im Forum: Projekte

Ja, ich habe auch erwähnt, das man Heuristiken einbauen kann, die das Ganze sehr beschleunigen. Desweiteren steigt die Suchgröße Exponentiel, das ist wahr, aber auch die Rechenkraft steigt Exponentiell!

Früher war zb 4 Gewinnt ein Problem, heute kann man es in ein Paar Stunen durchrechnen.

Die Anzahl, der Probleme die man bis zum Schluss durchrechnen Kann, steigt jeden Tag. Und in 30 Jahren, glaube ich, das schon bedeutende Probleme innerhalb dieses Bereichs sind.

Die Zauberworte sind also Heuristik und Zeit.

Vorstellbar ist auch, das man das Programm zb eine Stunde rechnen lässt, und dann gibt es den Besten Zug aus. Den es bis dahin gefunden hat. Auch zwingt einen Niemand, eine Zielfunktion zu nutzen die nur das Matt bewertet. Man kann auch andere Sachen, wie Figurenwerte benutzen. Dadurch würden differenziertre bewertungen entstehen.

Und wie ich geschrieben habe, soll dieser Problemsolver unbekannte Objekte untersuchen können. Das empfinde ich als lernen und Forschen!

Ja, mir fehlen Grundlagen, aber ich sehe das als Vorteil. Diese Grundlagen kann ich jederzeit noch lernen. Aber jetzt will ich erstmal meine Eigenen Fehler machen ;D

Thema: Künstliche Intelligenz - Ein neuer Fehlschlag
Am im Forum: Projekte

Oh ja, eine sehr hilfreiche Aussage...

Von außen betrachtet würde das System Intelligent agieren, wo ist dein Problem?

Thema: Künstliche Intelligenz - Ein neuer Fehlschlag
Am im Forum: Projekte

Soo, ich habe meine Ideen mal Skiziert.

Man sieht es ist nicht unmöglich und gibt es wahrscheinlich in Ähnlicher Form schon...

Es ist in einer pdf unter folgendem Link zu bestaunen:

##Ich will es nicht mehr veröffentlichen, da es mir Peinlich ist ;D

Ich bin gespannt, was ihr denkt!

Freundliche Grüße!

Thema: Künstliche Intelligenz - Ein neuer Fehlschlag
Am im Forum: Projekte

Entschuldigt alle bitte! Ich sehe manchmal sehr schnell rot. Soziale Intelligenz fehlt mir vielleicht wirklich etwas. Ich mag es nicht wenn sich jemand rein hängt, der gar keine Ahnung hat. Manchmal ist schweigen doch Gold! In jeder Hinsicht!