Strona 1 z 1

Zamknięcie aplikacji zajmującej > 800MB Ram Vista.

Nowy postNapisane: niedziela, 8 marca 2009, 17:56
przez GoldWolf
Witam, mam taki problem napisałem sobie taki prosty zapychacz pamięci. Pod Xp wszystko chodzi dobrze, jednak pod Vistą(Win 7) pojawia się problem, system zamyka mi program po zajęciu przez niego ok 800 - 900MB pamięci ram, co stanowi ok 51 - 52% całej pamięci dostępnej.
Co radzicie, teraz muszę odpocząć ale zastawiam się nad utworzeniem procesu, albo kilku by każdy zajmował ok 700MB, by osiągnąć stan ok 70 - 80 % zajętości pamięci.

To wątek wykonujący zapychanie:
Kod: Zaznacz cały
// Trzeci wątek dla pamięci -----------------------------------------------
int __fastcall Obciaz3(Pointer Parameter){
using std::string;
string zapelniacz = "To jest teks to zapelnienia pamieci", kosz, kosz1, kosz2;
int straznik = 0;
Form2->Ram->Visible = true;

TMemoryStatus *MS = new TMemoryStatus;
MS->dwLength = sizeof(MEMORYSTATUS); // tego można nie stosować.
GlobalMemoryStatus(MS);
Form2->Caption = FormatFloat("Całkowita pamięć: #,### KB", MS->dwTotalPhys / 1024);
//delete MS;


do{
   straznik = MS->dwMemoryLoad;
   GlobalMemoryStatus(MS);
   if(straznik < 50)
      kosz += zapelniacz;
   if(straznik >= 50 || straznik < 60)
      kosz1 += zapelniacz;
   if(straznik >= 60)
      kosz2 += zapelniacz;
   Form2->Ram->Caption = "Obciążenie pamięci: " + IntToStr(MS->dwMemoryLoad) + " %";
   Application->ProcessMessages();

   if(MS->dwAvailPageFile < 102400000)
      break;
}while(straznik < 77);
delete MS;
ExitThread(GetExitCodeThread(Obciaz3, NULL)); // usunięcie wątku z pamięci,
            //od tego momentu wątku nie można już wstrzymać.
}
//---------------------------------------------------------------------------


PS jeszcze mam takie pytanie bo trochę to dla mnie nie zrozumiałe, jeżeli zahaszuje tą linijkę kodu:
Kod: Zaznacz cały
//ExitThread(GetExitCodeThread(Obciaz3, NULL));

system operacyjny po zakończeniu wątku zwalnia pamięć, jeśli zostawię jak jest w kodzie tego nie zrobi, dlaczego ? Przecież powinno być na odwrót ?!?!

Re: Zamknięcie aplikacji zajmującej > 800MB Ram Vista.

Nowy postNapisane: niedziela, 8 marca 2009, 19:09
przez Cyfrowy Baron
Co radzicie,...


Ja doradzam dać sobie spokój z systemem VIsta, gdyż doświadczenie pokazuje, że nie zadomowił się ten system w Polsce, wciąż popularniejszy jest Windows XP. Co do systemu Windows 7 to trzeba jeszcze poczekać, gdyż an razie dostępne są tylko wersje BETA, a poza tym system wykazuje duże podobieństwo do systemu Vista, więc istnieje duże prawdopodobieństwo, że ten system również się nie przyjmie.

Co do jakiejś praktycznej porady, to może dodaj funkcje AntiKill - ► patrz serwis: Cyfrowy Baron dział: porady -> API -> AntiKill - blokowanie możliwości zamknięcia procesu przez inny proces.
To może jednak nie zadziałać, gdyż po pierwsze proces jest zamykany przez system, a jak wiadomo system ma specjalne uprawnienia, a po drugie nie wiadomo jak ten kod zachowa się w systemie Vista, wogóle niewiele wiadomo o systemie Vista...

Re: Zamknięcie aplikacji zajmującej > 800MB Ram Vista.

Nowy postNapisane: niedziela, 8 marca 2009, 20:17
przez GoldWolf
Głównie chodzi mi o W7, a napisałem Vista bo stabil jest w odróżnieniu od bety 7, tak czy siak muszę ten system jakoś oszukać ....

Re: Zamknięcie aplikacji zajmującej > 800MB Ram Vista.

Nowy postNapisane: poniedziałek, 9 marca 2009, 16:11
przez Witold
Dante napisał(a):PS jeszcze mam takie pytanie bo trochę to dla mnie nie zrozumiałe, jeżeli zahaszuje tą linijkę kodu:
Kod: Zaznacz cały
//ExitThread(GetExitCodeThread(Obciaz3, NULL));

system operacyjny po zakończeniu wątku zwalnia pamięć, jeśli zostawię jak jest w kodzie tego nie zrobi, dlaczego ? Przecież powinno być na odwrót ?!?!


Jeżeli dobrze myślę to chodzi o to:

MSDN: ExitThread napisał(a):Remarks

ExitThread is the preferred method of exiting a thread in C code. However, in C++ code, the thread is exited before any destructors can be called or any other automatic cleanup can be performed. Therefore, in C++ code, you should return from your thread function.
http://msdn.microsoft.com/en-us/library/ms682659.aspx

Re: Zamknięcie aplikacji zajmującej > 800MB Ram Vista.

Nowy postNapisane: niedziela, 19 kwietnia 2009, 17:11
przez GoldWolf
Mam taki błąd, może ktoś wie z czym to jest związane.
Obrazek

Re: Zamknięcie aplikacji zajmującej > 800MB Ram Vista.

Nowy postNapisane: czwartek, 14 maja 2009, 13:49
przez GoldWolf
Obszedłem ten problem w taki sposób, iż napisałem sobie dodatkowy program, który obciąża pamięć do ok 650MB i potem uruchamia sam siebie. Trwa to tak długo, aż całkowity rozmiar pamięci będzie obciążony w 80%.

Testowałem na XP, to aplikacja spokojnie 2,4GB może mieć, być może w przyszłości uda mi się wpaść na inne rozwiązanie.