Se blochează la gethostbyaddr când rulează ICQ ce să facă?
Bună ziua.
Confruntată cu o astfel de problemă:
Când începe ICQ, gethostbyaddr atârnă în prog.
Cu ce poate fi conectat? De exemplu, ICQ poate schimba parametrii de expirare sau altceva.
Și cum să facem totul să funcționeze?
Cine este "neglijat ICQ". În față?
> Cine este "neglijat ICQ"? În față?
Hmm. Spuneți fraza "Clientul ICQ al unei versiuni a firmei de dezvoltare Mirabilis" - acest lucru. e greu de văzut.
> Dacă este posibil să modificați parametrii de expirare sau
> ce altceva?
Nu cred.
Are nevoie de el, întreabă el?
Cred că problema este în altceva
> Hmm. Spuneți fraza "Clientul ICQ al unei versiuni a firmei de dezvoltare Mirabilis" - aceasta. e greu de văzut.
> Cred că problema este în altceva
Care sunt ideile? Dependența este clară și stabilă.
> El are nevoie de ea, întreabă el?
De exemplu, pentru munca sa ICQ permite un răspuns de întârziere mare din rețea, astfel încât să se stabilească timpul de expirare pentru valoarea de care are nevoie. Nu configurez niciun timeout și, prin urmare, atunci când folosesc ICQ, folosesc setările sale și poate gethostbyaddr nu închide, ci doar așteaptă un timeout foarte mare.
Unde se află în întrebarea inițială?
Nicăieri.
> Când este lansat ICQ
Da, phih știe ce înțeles în același timp sub expresia "asasked").
> când rulez ICQ, folosesc setările
> Asta este # xA0; unde?)
Dacă setările care fac global ICQ atunci programul meu le folosește automat.
Proiecte open source. Ți-am spus principiul acestei acțiuni în particular. Deci nu a funcționat? Haideți - faceți un exemplu demo pe care l-ați agățat și aruncați în mod stabil aici. Vom înțelege.
> Faceți demo un exemplu pe care îl blocați stabil
Acesta se blochează destul de rar, dar cu ICQ rulează pe unul din 300 de calculatoare atârnă.
Când nu funcționează normal, tot ce trebuia să treacă.
Și există dependență de altceva. pentru că uneori, chiar și atunci când ICQ nu este agățat :(
Dacă reușesc să localizez bug-ul, voi posta codul.
Pe scurt, acest cod se blochează
Ce este InvertIP (ADDR)?
> Ce este InvertIP (ADDR);
Funcția mea care rearanjează ordinea octeților
Găsiți o altă caracteristică.
Dacă lăsați în urmă # xA0; gethostbyaddr apoi toate plug bine. Dacă adăugați codul și conectați compania
WNetAddConnection2
WNetCancelConnection2
Asta incepe sa stea :(
# xA0; cu temp do
# xA0; # xA0; începeți
# xA0; # xA0; # xA0; dwType: = RESOURCETYPE_DISK;
# xA0; # xA0; # xA0; lpLocalName: = zero;
# xA0; # xA0; # xA0; lpRemoteName: = PChar ("" + s);
# xA0; # xA0; # xA0; lpProvider: = "";
# xA0; # xA0; sfârșitul;
# xA0; j: = WNetAddConnection2 (temp, zero, zero, 0); # xA0; // Conectați computerul
Ie se pare că apelul acestor funcții, deoarece afectează apelurile ulterioare gethostbyaddr
Aici cel mai probabil pe el la tine, de asemenea, atârnă pentru nu a declarat lpProvider.
Codul de identificare al furnizorului:
funcția TMainForm.GetProvider (const CompName: String): String;
var
# Buffer: matrice [0..255] din Char;
# xA0; Dimensiune: DWORD;
începe
# xA0; Dimensiune: = SizeOf (Buffer);
# XA0, în cazul în care WNetGetProviderName (WNNC_NET_LANMAN, @Buffer, Dimensiune) <> NO_ERROR atunci
# xA0; # xA0; Rezultat: = "absent"
# xA0; altceva
# xA0; # xA0; Rezultat: = Șir (Buffer);
se încheie;
Determinarea numelui furnizorului nu a ajutat.
observație:
Frecvența suspendării cu ICQ și fără ICQ diferă de la o dată la alta. Fără ICQ, una se blochează pentru 1500 de calculatoare. Cu ICQ unul pentru 500.
Sergey M.
Și de ce a fost cunoscută versiunea ICQ? Există vreo problemă cu alte versiuni de ICQ?
> De ce era cunoscută versiunea ICQ?
Unde am întrebat despre "versiunea".
Am întrebat # xA0; client specific al acestei rețele). Care până în prezent există o multitudine de clienți ai Mirabilis ICQ, Miranda, Trillian, RAT RQ, etc. și altele asemenea.
Deci sunt niște probleme cu acești clienți?
N-am văzut pe nici unul dintre ei
> Nu am văzut niciunul din acestea
Atunci care este diferența care client? ;)
> Ce diferență face clientul?
Ei bine, niciodată nu știți ce altceva (cu excepția celor cunoscuți) pe care îl utilizați.
Introduceți la sfârșitul fiecărui fir Sleep (1000); a îmbunătățit semnificativ situația, dar în cele din urmă problema nu a decolat.
> Introduceți la sfârșitul fiecărui fir
Care este "sfârșitul fluxului"?
Ilurați în cod.
Începeți fluxul
Ping
extrage MAC
dacă este Mac
# xA0; completă
# xA0; # xA0; începeți
# xA0; # xA0; # xA0; gethostbyaddr;
# xA0; # xA0; # xA0; WNetAddConnection2;
# xA0; # xA0; # xA0; WNetCancelConnection2;
# xA0; # xA0; sfârșitul;
Somn (1000);
sfârșitul fluxului
Și cum este acest cod legat de "setările ICQ"?
În plus, afirmați că firul se blochează "a.
> Și cum este acest cod legat de "setările ICQ"?
> În plus, susțineți că firul se blochează "a.
Dacă adăugați WNetAddConnection2; # xA0; WNetCancelConnection2; începe să închidă GetHostByAddr; atunci este logic să presupunem că firul următor se blochează și nu cel curent. După cum este posibil, nu am nicio idee. Poate că aceste operațiuni necesită ceva timp pentru a finaliza. Și dacă nu le dați acest timp, atunci GetHostByAddr; poate să stea.
Dar faptul rămâne. Gluck a scăzut semnificativ.
Cred că Aska cu „setările“ dvs. nu are absolut nimic de-a face cu - se întâmplă în Mazday (Mazday = Win9x / Me), precum și punerea în aplicare a mazdaynaya WNET-funcționalitate a fost întotdeauna renumită pentru denumită în continuare sablat“.
> Cred că Aska cu "setările" lui nu are absolut nimic de a face cu
Experiența vorbește pentru altul. Și ceea ce influențează exact este dificil de determinat. Sau punerea în aplicare a unei curbe în ICQ previne alte programe din rețea. Sau Windows care nu trage astfel de sarcini. Deși am încercat să joc numărul de fire. Rezultatul este același.
Și ce înseamnă de fapt "îngheța"?
Funcția GetHostByAddr care este chemată nu readuce deloc controlul sau este lungă nerezonabil?
Acesta poate fi de a renunța la blocarea Fct în favoarea versiunii sale asincron (WSAAsyncGetHostByAddr)?
> F-tionul GetHostByAddr care este chemat nu readuce controlul deloc sau este lung nerezonabil?
Nu știu sigur. Dar în timpul ordinii de o oră ea nu a revenit controlul :(
> Este posibil să refuze blocarea f-tsii în favoarea versiunii sale asincrone (WSAAsyncGetHostByAddr)?
Acest lucru va schimba în mod semnificativ logica aplicației. Și funcția în sine fără WNetAddConnection2; # xA0; WNetCancelConnection2; funcționează foarte bine.
Un depanator pentru ce?
> Aceasta va schimba semnificativ logica aplicației
Ei bine, cel puțin de dragul experimentului.
> Un program de depanare pentru ce?
Și cum să prindeți un debugger agățat de o funcție în aplicația multithreaded în cazul în care probabilitatea unui hangup 1/500?
Și care este secretul pentru conectarea resursei și oprirea acesteia imediat?
Scopul este să găsim unde picioarele cresc împreună cu bug-ul. Și, într-adevăr, după conectarea companiei, o mai scanează. Dar este nevoie de timp și nu are încă buggy. Prin urmare, este oprit