Avatar billede Slettet bruger
11. august 2006 - 18:06 Der er 4 kommentarer og
1 løsning

Lock på egen control, virker det?

Jeg har, som nogen nok ved, lavet denne MultiArray control. Men da jeg har brug for at køre Lock på arrayet, da jeg kører multithreading, tænkte jeg på om dette virker når jeg gør sådan:

MultiArray UserInfoTable = new MultiArray(5);

Lock(UserInfoTable)
{
//code
}

I steddet for sådan:

ArrayList MyArray = new ArrayList();

Lock(MyArray.SyncRoot)
{
//code
}
Avatar billede r.hegaard Nybegynder
11. august 2006 - 18:31 #1
Ja, det burde virke med alle objekter. Se evt. her: http://msdn2.microsoft.com/en-us/library/c5kehkcz.aspx
Nu har jeg ikke hørt om, hvordan din MultiArray virker. Men det kunne måske være en idé at låse den indefra - så er du sikker på, at den altid bliver låst og du behøver ikke at skrive lock(UserInfoTable) hver gang du bruger den.
Avatar billede arne_v Ekspert
11. august 2006 - 19:10 #2
langt hen af vejen er det ligegyldigt hvad du synkroniserer paa

string arne = "arne";
MultiArray UserInfoTable = new MultiArray(5);

Lock(arne)
{
//code
}

boer ogsaa virke.

Saa laenge alle der skal synkroniserss locker paa det samme argument, saa
er det ligegyldigt hvad det er.

Af hensyn til kodens laesbarhed er det bedst at locke paa noget relevant
saa laeserne kan gennemskue koden.

.SyncRoot er saa vidt jeg forstaa et specielt lock objekt, som bruges internt
i klassen

pointen er at koden internt i klassen jo ikke kendet dit lock objekt og derfor ikke
kan locke paa det - loesningen er saa at du kan locke paa det lock objekt som
bruges internt i klassen

det er ihvertfald som jeg har forstaaet det - docs er ikke specielt klare
Avatar billede Slettet bruger
11. august 2006 - 19:20 #3
hehe okay, nu bruger jeg lock for en sikkerheds skyld, så har jeg da forbygget fejl! :)

Hmm Arne jeg har spurgt om det før, men vil gerne lige have en opdateret version. Jeg er ved at lave et LAn p2p, og er nået til at skulle sende filer over LAn'et. Jeg bruger TcpClient. Hver application er helt ens, så de er på en måde begge client og server. Men jeg har altså en lytte tråd der modtager alt indgående tcp trafik. Men jeg skal bruge et system der simpelt og sikkert:

1. Modtager data (er lavet)
2. Identificerer via et ID eller noget, hvilken fil dataerne skal skrives til, da flere clienter jo kan sende data til dig samtidigt.

3. Jeg skal få at vide i den sidste pakke at overførslen er slut, og filen skal derfor lukkes for skrivning.

Hvordan laver jeg et så simpelt som muligt system til at håndtere det, tror du ved hvad jeg mener.
Avatar billede Slettet bruger
11. august 2006 - 19:22 #4
Jeg sender fx at fil download startes sådan her:

hClient.Client.Send(Encoding.ASCII.GetBytes("?downloadfile" + CMDChar + hPath));

? indikerer det er en command, "CMDChar" adskiller command fra argumenter..


Modtager det sådan:

if (funcs.ParseCmd(stringData, ref RefCmd, ref RefArg))
                            {
                                String[] Split = RefArg.Split(CMDChar.ToCharArray());
                                IP = ((IPEndPoint)CurrentClient.Client.RemoteEndPoint).Address.ToString();

                                switch (RefCmd)
                                {
                                    case "downloadfile":
                                        AddFileToUploadList(Split[0], CurrentClient);
                                        break;

                                    case "sendingfile":
                                        MessageBox.Show("file piece");
                                        break;
                                }
                            }
Avatar billede Slettet bruger
12. august 2006 - 12:52 #5
har måske selv fundet på noget nu
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester