Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Тормоза и таймер [D7, XP]


Страницы:   1 2 3 4

Alex_Ford ©   (2008-11-07 10:05:00) 

Привет!

Мастера у меня программа выполняет несколько задач. Все задачи выполняет таймер. Но от этого комп сильно тормозит. Используется всего один компонент таймер с интервалом в одну секунду. Что нужно сделать чтобы все работало без тормозов.

С уважением!


Сергей М.   (2008-11-07 12:42:00) [41]


> Alex_Ford   (07.11.08 12:21) [31]


Вызывай эту функцию с параметром st


Alex_Ford   (2008-11-07 12:21:00) [42]

мастера подскажите тогда пожалуйста, как правильно воспользоваться этой функцией с использованием таймера и checklistbox1 ?
Или с ума сойду - так и не поняв как это работает что и как нужно сделать правильно.


function KillTask(ExeFileName: string): integer;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := 0;

FSnapshotHandle := CreateToolhelp32Snapshot
(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,
FProcessEntry32);

while integer(ContinueLoop) <> 0 do
begin
  if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
  UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
  UpperCase(ExeFileName))) then
    Result := Integer(TerminateProcess(OpenProcess(
    PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0));
  ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;


Сергей М.   (2008-11-07 12:17:00) [43]


> Правильный$Вася   (07.11.08 12:01) [29]


Производительность капиталистического труда обратно пропорциональна значению интервала срабатывания таймера


Правильный$Вася   (2008-11-07 12:01:00) [44]


> for i:=0 to form1.CheckListBox1.Items.Count-1  do
>    if checklistbox1.Items.Count = 0 then exit

просто песня!

а зачем каждую секунду? что, нельзя разве игру закрыть через 10 сек?


Сергей М.   (2008-11-07 12:00:00) [45]


> Что бы нагреть процессор.
>


А прогу, соответственно, переименовать в Утюг.ехе


Anatoly Podgoretsky   (2008-11-07 11:58:00) [46]

> Сергей М.  (07.11.2008 11:40:23)  [23]

Что бы нагреть процессор.


Anatoly Podgoretsky   (2008-11-07 11:57:00) [47]

> Alex_Ford  (07.11.2008 11:33:21)  [21]

Процессор нагревается когда он выполняет операции.


Alex_Ford   (2008-11-07 11:49:00) [48]

Удалено модератором


Alex_Ford   (2008-11-07 11:49:00) [49]

В посте 21 FindWindow я вызывал один раз.

Вот переделанный код. Кажется работает.


procedure TForm1.Timer1Timer(Sender: TObject);
begin
 for i:=0 to form1.CheckListBox1.Items.Count-1  do
 if checklistbox1.Items.Count = 0 then exit else
     if checkListBox1.Checked[i] = true then
     begin
     st:= checklistbox1.Items.Strings[i];
     if findwindow(nil,pchar(st))<>0 then
        postmessage(findwindow(nil,pchar(st),),WM_CLOSE,0,0);
        end;
end;


Сергей М.   (2008-11-07 11:40:00) [50]


> Alex_Ford   (07.11.08 11:33) [21]


За каким лешим ты дваждывызываешь FindWindow ?
Один раз вызвал, нашел окно, получил его хэндл и передал параметром в PostMessage !


Anatoly Podgoretsky   (2008-11-07 11:34:00) [51]

> Alex_Ford  (07.11.2008 11:12:17)  [17]

Приказ, вокзал, дорога
Как видишь программист здесь не фигурирует.


Alex_Ford   (2008-11-07 11:33:00) [52]

Хорошо, буду копать, тогда скажите мне пожалуйста, почему когда список загружен из файла и ежесекундно проверяется запущена ли папка или нет, проц нагревается аж до 70% ???

var
 Form1: TForm1;
 i: integer;
 st: string;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 for i:=0 to 1000 do
 begin
   checklistbox1.Items.Add('items '+inttostr(i));
   checklistbox1.Checked[i]:= true;
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 checklistbox1.Items.SaveToFile('C:\test.txt');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 checklistbox1.Items.LoadFromFile('C:\test.txt');
 for i:=0 to form1.CheckListBox1.Items.Count-1  do
 checklistbox1.Checked[i]:= true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 for i:=0 to form1.CheckListBox1.Items.Count-1  do
 if checklistbox1.Items.Count = 0 then exit else
     if checkListBox1.Checked[i] = true then
     st:= checklistbox1.Items.Strings[i];
     if findwindow(nil,pchar(st))<>0 then
        postmessage(findwindow(nil,pchar(st),),WM_CLOSE,0,0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 form1.Button3Click(self);
end;

end.


Anatoly Podgoretsky   (2008-11-07 11:24:00) [53]


> Значит, возможно проблема в том, что я не правильно расставляю
> скобки begin..end

Начни с того, что правильно расставь скобки, с учетом иерархиии - никто же за тебя здесь это делать не будет и пробираться через произвольную лесенку скобок тоже.


Правильный$Вася   (2008-11-07 11:17:00) [54]


>  Если checked = true то папка закрывается, если галочка
> снята, то ее открыть можно

т.е. ты перечислил все папки вместотого, чтобы перечислить только нужные для закрытия?


Сергей М.   (2008-11-07 11:16:00) [55]


> и так сойдет. На мой взгляд


Тебя случаем не Владимиром зовут ?)


> Проблема в одном - игры, а не работа


Все равно как играли так и играть будут. Лазейки всегда найдутся.
Проблема решается толькоадминистративным путем.


Alex_Ford   (2008-11-07 11:12:00) [56]

Кто, куда и как ее "запустил" ?
И чем она помешала будучи в "запущенном" состоянии, коль скоро нужно за этим безобразием постоянно следить ?

Проблема в одном - игры, а не работа !!!!!!!!!


Alex_Ford   (2008-11-07 11:11:00) [57]

Для того кто плохо шарит в компе и так сойдет. На мой взгляд.

Короче задача такая. Не давать открывать папки и запускать exe, которые в списке и выбраны в checklistbщx.

В нете нашел код котороый убивает процессы


function KillTask(ExeFileName: string): integer;
const
 PROCESS_TERMINATE=$0001;
var
 ContinueLoop: BOOL;
 FSnapshotHandle: THandle;
 FProcessEntry32: TProcessEntry32;
begin
 result := 0;

 FSnapshotHandle := CreateToolhelp32Snapshot
 (TH32CS_SNAPPROCESS, 0);
 FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
 ContinueLoop := Process32First(FSnapshotHandle,
 FProcessEntry32);

 while integer(ContinueLoop) <> 0 do
 begin
   if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
   UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
   UpperCase(ExeFileName))) then
     Result := Integer(TerminateProcess(OpenProcess(
     PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0));
   ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
 end;
 CloseHandle(FSnapshotHandle);
end;

Это помещается в список и обрабатывается каждую секунду.


Сергей М.   (2008-11-07 11:09:00) [58]


> запущена ли папка


Кто, куда и как ее "запустил" ?
И чем она помешала будучи в "запущенном" состоянии, коль скоро нужно за этим безобразием постоянно следить ?


clickmaker   (2008-11-07 11:05:00) [59]

гы... это такой хитрый способ запретить юзеру открывать папку?


Alex_Ford   (2008-11-07 11:04:00) [60]

//Излагай подробно задачу, которую должно решать твое приложение ..

Извиняюсь!

Программа должна проверять, запущена ли папка, которая содержится в списке. Список - компонент checkListBox1. Если checked = true то папка закрывается, если галочка снята, то ее открыть можно


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо