Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];

Вниз

Тормоза и таймер   Найти похожие ветки 

 
Alex_Ford   (2008-11-07 10:05) [0]

Привет!

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

С уважением!


 
Riply ©   (2008-11-07 10:09) [1]

> [0] Alex_Ford   (07.11.08 10:05)
> Все задачи выполняет таймер. Но от этого комп сильно тормозит. Используется всего один компонент таймер с интервалом в одну секунду.
> Что нужно сделать чтобы все работало без тормозов.

Поставить интервал в один час :)
А если серьезно, то от TTimer тормозить ничего не будет.
Что у тебя в нем вызывается ?


 
clickmaker ©   (2008-11-07 10:18) [2]

> Все задачи выполняет таймер

за что ж ты его так?
почему не потоки?


 
Alex_Ford   (2008-11-07 10:28) [3]

Программа при запуске загружает список из файла.
Таймер в интервале в секунду проверяет эти значения и если все ОК то вызывает процедуру. Список очень большой 1000-1500 записей.

Мастера, подскажите пожалуйста как с потоком тогда работать, если таймер нагружает проц?


 
Плохиш ©   (2008-11-07 10:31) [4]


> Alex_Ford   (07.11.08 10:28) [3]

1. Таймер не нагружает систему
2. Систему нагружает код, который проверяет эти значения и если все ОК то вызывает процедуру

PS. Не надо валить свои проблемы на таймеры...


 
Johnmen ©   (2008-11-07 10:31) [5]


> Alex_Ford   (07.11.08 10:28) [3]
> таймер нагружает проц

Это ты нагружаешь проц, а не таймер.


 
sniknik ©   (2008-11-07 10:41) [6]

а смысл проверять? тем более раз в секунду (а сама проверка видимо отрабатывает за 3 :)). просто мониторить изменение файла, ждать событие от системы, и только тогда проверять.


 
Anatoly Podgoretsky ©   (2008-11-07 10:42) [7]

Таймер не нагружает процессор.


 
Alex_Ford   (2008-11-07 10:42) [8]

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

Посмотрите пожалуйста мой код, что не так я сделал?


begin
 for i:=0 to checklistbox1.Items.Count-1 do
   if not checklistbox1.Checked[i] then exit else
   begin
     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);

     if (form1.CheckBox4.Checked = true) and
        (findwindow(nil,pchar(tasklist))<>0) then
     begin
         postmessage(findwindow(nil,pchar("Диспетчер задач Windows"),),WM_CLOSE,0,0);
 end;

    begin
    if (form1.CheckBox5.Checked = true) and      
       (form1.CheckBox1.Checked = true)  then  
     begin
               
     form1.RadioButton1.Checked:= true end else

   if (form1.CheckBox5.Checked = false) and      
      (form1.CheckBox1.Checked = true) then
     begin
     for k:=0 to form1.CheckListBox1.Items.Count-1 do  
     form1.CheckListBox1.Checked[k]:=true;
     end;
   if (form1.CheckBox5.Checked = false) and
      (form1.MaskEdit1.Text = startgame.Caption)and
      (form1.CheckBox2.Checked = true) then
end;
end;
end;
end;


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


> Программа при запуске загружает список из файла.Таймер в
> интервале в секунду проверяет эти значения

список чего?
в чем заключается проверка?


 
Плохиш ©   (2008-11-07 10:46) [10]


> Alex_Ford   (07.11.08 10:42) [8]


> Посмотрите пожалуйста мой код, что не так я сделал?

Это не код, а маразм. Советую как 2й пункт в изучении прочитать справку по findwindow, на предмет возвращаемого значения...

1й пункт - прочитать букварь.


 
Сергей М. ©   (2008-11-07 10:52) [11]


> что не так я сделал?


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


 
sniknik ©   (2008-11-07 11:04) [12]

> загружает список из файла.
?
> Посмотрите пожалуйста мой код, что не так я сделал?
как минимум ты не загружаешь список из файла...

> Излагай подробно задачу, которую должно решать твое приложение ..
задача - спрятаться от диспетчера, вернее не дать найти в нем себя мешая работе с ним.
-> postmessage(findwindow(nil,pchar("Диспетчер задач Windows"),),WM_CLOSE,0,0);


 
Alex_Ford   (2008-11-07 11:04) [13]

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

Извиняюсь!

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


 
clickmaker ©   (2008-11-07 11:05) [14]

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


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


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


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


 
Alex_Ford   (2008-11-07 11:11) [16]

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

Короче задача такая. Не давать открывать папки и запускать 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;

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


 
Alex_Ford   (2008-11-07 11:12) [17]

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

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


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


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


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


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


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


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


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

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


 
Anatoly Podgoretsky ©   (2008-11-07 11:24) [20]


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

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


 
Alex_Ford   (2008-11-07 11:33) [21]

Хорошо, буду копать, тогда скажите мне пожалуйста, почему когда список загружен из файла и ежесекундно проверяется запущена ли папка или нет, проц нагревается аж до 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:34) [22]

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

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


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


> Alex_Ford   (07.11.08 11:33) [21]


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


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

В посте 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;


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

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


 
Anatoly Podgoretsky ©   (2008-11-07 11:57) [26]

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

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


 
Anatoly Podgoretsky ©   (2008-11-07 11:58) [27]

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

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


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


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


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


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


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

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

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


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


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


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


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

мастера подскажите тогда пожалуйста, как правильно воспользоваться этой функцией с использованием таймера и 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:42) [32]


> Alex_Ford   (07.11.08 12:21) [31]


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


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


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

у него заголовки окон, а не список экзешников


 
Alex_Ford   (2008-11-07 12:54) [34]

Товарищи!

Посмотрите, что так и что не так:

Сама функция убивающая ехе


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;




Обрабатываю в таймере с интервалом 3 секунды так.
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];
     KillTask(st);     //уничтожим процессы из списка
end;


 
clickmaker ©   (2008-11-07 13:02) [35]

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

сам-то понял, что написал?


 
Vlad Oshin ©   (2008-11-07 13:11) [36]

checklistbox1.Items.Strings[i]; это окна

GetWindowThreadProcessId  - процесс по окну

потом его kill


 
Johnmen ©   (2008-11-07 13:19) [37]

Как можно что-то объяснить человеку, если он ничего, кроме копи-паста, не знает и не умеет?


 
Anatoly Podgoretsky ©   (2008-11-07 16:35) [38]

И в 21 и в 24 все равно два раза

    if findwindow(nil,pchar(st))<>0 then
       postmessage(findwindow(nil,pchar(st),),WM_CLOSE,0,0);


 
clickmaker ©   (2008-11-07 16:49) [39]

> [38] Anatoly Podgoretsky ©   (07.11.08 16:35)
> И в 21 и в 24 все равно два раза

это на случай, если очень шустрый пользователь успеет переоткрыть окно между вызовами


 
Anatoly Podgoretsky ©   (2008-11-07 18:44) [40]

Так во втором случае нет проверки - а это уже ошибка в этом случае.


 
Alex_Ford   (2008-11-08 12:10) [41]

Добрый день, мастера!

Продолжаю работать над поставленной задачей. Но пока решить ее нормально не получается.

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

Дано:
Функция, которая убивает процессы, как .*ехе.


function KillTask(ExeFileName: string): integer;
const
PROCESS_TERMINATE=$0001;
var
Co:BOOL;
FS:THandle;
FP:TProcessEntry32;
begin
result:=0;
FS:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FP.dwSize:=Sizeof(FP);
Co:=Process32First(FS,FP);
while integer(Co) <> 0 do
begin
if ((UpperCase(ExtractFileName(FP.szExeFile))=UpperCase(ExeFileName)) or
(UpperCase(FP.szExeFile)=UpperCase(ExeFileName))) then
Result:=Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),
FP.th32ProcessID),0));
Co:=Process32Next(FS,FP);
end;
CloseHandle(FS);
end;


Данные для имен папок и имен ехе содержатся в CheckListBox.
Для проверки использую таймер с интервалом в 1 секунду.
В цикле проверяю, если это заголовок (имя папки), то ее закрыть.


procedure TForm1.Timer1Timer(Sender: TObject);
var i: integer;
  st: string;
  exe: string;
begin
   for i:=0 to checklistbox1.Items.Count-1 do
   begin
     if checkListBox1.Checked[i] = true then
     begin
     st:= checklistbox1.Items.Strings[i];
     postmessage(findwindow(nil,pchar(st),),WM_CLOSE,0,0);
     end else
     exe:= checklistbox1.Items.Strings[i];
     KillTask(st);
end;
     application.ProcessMessages;
end;


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


 
Alex_Ford   (2008-11-08 12:10) [42]

Удалено модератором
Примечание: дубль


 
Loginov Dmitry ©   (2008-11-08 12:44) [43]

> Мастера, подскажите пожалуйста, где кроется ошибка?


procedure TForm1.Timer1Timer(Sender: TObject);
var i: integer;
 st: string;
 exe: string;
begin
  for i:=0 to checklistbox1.Items.Count-1 do
  begin
    if checkListBox1.Checked[i] = true then
    begin
    st:= checklistbox1.Items.Strings[i];
    postmessage(findwindow(nil,pchar(st),),WM_CLOSE,0,0);
    end else
    exe:= checklistbox1.Items.Strings[i];
    KillTask(st);
end;
    application.ProcessMessages;
end;


Это че вообще за безобразие? Что оно делать хоть должно?


 
Alex_Ford   (2008-11-08 13:00) [44]

st - это имя папки, которое хранится в checklistbox (например: Новая папка)
exe - это имя процесса, например crack.exe (из диспетчера задач)

Если папка то послать сообщение
postmessage(findwindow(nil,pchar(st),),WM_CLOSE,0,0);

Если прога (как процесс) то убить ее как процесс, т.е. так
KillTask(st);


 
Leonid Troyanovsky ©   (2008-11-08 13:11) [45]


> Alex_Ford   (08.11.08 13:00) [44]

> Если папка то послать сообщение
> postmessage(findwindow(nil,pchar(st),),WM_CLOSE,0,0);

А если мамка?
Огласи весь checklistbox.

--
Regards, LVT.


 
Alex_Ford   (2008-11-08 13:17) [46]

В checklistbox у меня хранится список, что убивать.

Например,
crack.exe
proga.exe
winamp.exe
и так далее...

Они отмечены checklistbox1.Checked:= true;
Вот именно эти отмеченные и нужно завершать функцией KillTask.


 
Loginov Dmitry ©   (2008-11-08 13:19) [47]

> Например,
> crack.exe
> proga.exe
> winamp.exe
> и так далее...


А где же в примере "папки"?


 
Riply ©   (2008-11-08 13:21) [48]

> [42] Alex_Ford   (08.11.08 12:10)
> Добрый день, мастера!

А это ничего, что
exe:= checklistbox1.Items.Strings[i];
KillTask(st);

? :)


 
Leonid Troyanovsky ©   (2008-11-08 13:26) [49]


> Alex_Ford   (08.11.08 13:17) [46]

> Например,
> crack.exe
> proga.exe
> winamp.exe
> и так далее...
>
> Они отмечены checklistbox1.Checked:= true;

Ну и славно, время от времени проходись Process32First - Next
и сравнивай с запрещенными (и отмеченными в списке),
если нашлось - OpenProcess/TerminateProcess/CloseHandle.

> Вот именно эти отмеченные и нужно завершать функцией KillTask.

KillTask - в печь.

--
Regards, LVT.


 
Johnmen ©   (2008-11-08 13:29) [50]


> Riply ©   (08.11.08 13:21) [48]
> А это ничего, что

Это отлично!


 
Alex_Ford   (2008-11-08 13:33) [51]

Ребят, на этом форуме часто стали прикалываться над начинающими.
Год назад я был в восторге от того, что delphimaster имеет такой высокий показатель не только по посещаемости, но и по количеству оказанной помощи! Теперь это превращается не в так сказать, образовательный портал, а скорее всего ареной, где так сказать профи, называющие себя мастерами только улыбаются в ответ!!!!
Вы уж меня простите за такие слова, но я вот уже второй день как бьюсь над этой задачей. И никто не хочет указать, куда нужно смотреть, на что нужно обращать особое внимание для решения поставленной задачи!
Ответы только одни - читай да вникай. Вспомните сами, мастера, что в школе вам родители помошали решать задачки и помогали вникать!

Delphimaster.ru - для меня тоже как родители. Причем родные! А подсказать или помочь никто не хочет.
Очень жаль......

p.s. до слёз.


 
Leonid Troyanovsky ©   (2008-11-08 13:49) [52]


> Alex_Ford   (08.11.08 13:33) [51]

> Вы уж меня простите за такие слова, но я вот уже второй
> день как бьюсь над этой задачей. И никто не хочет указать,
>  куда нужно смотреть, на что нужно обращать особое внимание
> для решения поставленной задачи!

Не плачь, начни новый проект, положи на него checklistbox и
один button, по нажатию которого будет производится:

var
 i: Longint;
 h: THandle;
..
CreateToolhelp32Snapshot();
Process32First();
repeat
 for i := 0 to CheckListBox1.Count-1 do
    if checkListBox1.Checked[i] then
    {сравниваем имя файла с запрещенными}
    {и если найдено, то}
    begin
      h:= OpenProcess(PROCESS_TERMINATE, false, FP.th32ProcessID);
      Win32Check(h <> 0);
      Win32Check(TerminateProcess(h, 0));
      CloseHandle(h);
    end;

until Process32Next();
..

--
Regards, LVT.


 
Alex_Ford   (2008-11-08 14:05) [53]

Леонид! Спасибо за помощь!

Я немного плохо соображаю здесь. Затрудняюсь что писать в скобках.
CreateToolhelp32Snapshot()  - TH32CS_SNAPPROCESS, 0;
Process32First(); ??? :(

Подскажите пожалуйста, куда смотреть?


 
Leonid Troyanovsky ©   (2008-11-08 14:21) [54]


> Alex_Ford   (08.11.08 14:05) [53]

> Я немного плохо соображаю здесь. Затрудняюсь что писать
> в скобках.


uses
 tlhelp32;

procedure TForm1.Button1Click(Sender: TObject);
var
 h:Thandle;
 i: Longint;
 Co:BOOL;
 FS:THandle;
 FP:TProcessEntry32;
begin
 FS:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 FP.dwSize:=Sizeof(FP);
 Co:=Process32First(FS,FP);
 repeat
   for i := 0 to CheckListBox1.Count-1 do
     if checkListBox1.Checked[i] then
        if ((UpperCase(ExtractFileName(FP.szExeFile))=
            UpperCase(CheckListBox1.Items[i]))) then
         {сравниваем имя файла с запрещенными}
         {и если найдено, то}
         begin
           h:= OpenProcess(PROCESS_TERMINATE, false, FP.th32ProcessID);
           Win32Check(h <> 0);
           Win32Check(TerminateProcess(h, 0));
           CloseHandle(h);
         end;
  until (not Process32Next(FS,FP));
  CloseHandle(FS);
end;


Но, это еще не все. Перед тем как вешать подобный код
на таймер нужна тщательная работа над ошибками.
Как, например, CloseHandle(FS); д.б. в секции finally.

--
Regards, LVT.


 
engine ©   (2008-11-08 14:29) [55]

uses ..., TlHelp32;
....
var
 h : THandle;
 tPE32 : tagPROCESSENTRY32;
begin
 tPE32.dwSize :=  SizeOf(tPE32);
 h := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
 if Process32First(h, tPE32) ...
 ...
end;


 
Leonid Troyanovsky ©   (2008-11-08 14:37) [56]


> Alex_Ford   (08.11.08 14:05) [53]

> Подскажите пожалуйста, куда смотреть?

Смотреть надо http://msdn.microsoft.com/.
Т.е., обязательно анализировать возвращаемый результат
и если требуется, то и GetLastError.
Например:

    h := OpenProcess(PROCESS_TERMINATE, false, FP.th32ProcessID);
    try
       Win32Check(h <> 0);
       Win32Check(TerminateProcess(h, 0));
    finally
       if h <> 0 then
         CloseHandle(h);
    end;

--
Regards, LVT.


 
Alex_Ford   (2008-11-08 14:38) [57]

Большое спасибо!

Не понятно только одно, почему, когда в списке отмечено 2-3 элемента на обработку, программа работает ХОРОШО!
Но. когда список достигает около 200-300 элементов с активным свойством checked, то программа ужасно сильно тормозит.


 
Loginov Dmitry ©   (2008-11-08 15:03) [58]

> А подсказать или помочь никто не хочет.


В данном случае это не мудрено. Тому есть причины. В основном - это уровень автора. По тому коду, что здесь выкладывается создается впечатление, что уровень автора очень-очень низкий. Человек самостоятельно не может расставить операторные скобки BEGIN..END. Ясно, что никакие объянения и подсказки не помогут. Единственный способ помочь - выложить готовый год, причем комментировать его - бесполезно. Форумчане же стремятся помогать именно подсказками и намеками, с надежной, что человек вникнет и поймет. А "помогать" автору путем написания готового кода безо всякой надежды на то, что он вникнет - нет абсолютно никакого желания. Это пустая трата времени.


 
Alex_Ford   (2008-11-08 15:21) [59]

Я согласен с Вами. Не спорю. Нет - у меня не "низкий-низкий" уровень. Но я начинающий. Где-то получается быстро и легко, где-то трудно или вообще невозможно нетолько вникнуть, но и понимать. Например, эта ветка форума, для меня одна из самых сложных тем. Но разобраться, попытаться хоть что-то понять - очень сильно хочется. Если бы мне было все равно, или лень - я бы не стал тратить время впустую.

Согласитесь:  Не всем программирование дается одинаково. Каждый копается и открывает для себя новое,  интересное и полезное ПО СВОЕМУ.

Модераторов прошу меня не наказывать, если я что-то не так сказал.
Мотив на свое "несоображение" я принимаю.


 
Anatoly Podgoretsky ©   (2008-11-08 16:18) [60]

> Loginov Dmitry  (08.11.2008 12:44:43)  [43]

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


 
Anatoly Podgoretsky ©   (2008-11-08 16:22) [61]


> Ребят, на этом форуме часто стали прикалываться над начинающими.

Ты к ним не относишься...


 
Loginov Dmitry ©   (2008-11-08 16:41) [62]

> А что делает exe и неужели компилятор тебе ничего не сказал,
> или ты отключил все сообщения, что бы он не надоедал?


Анатолий, меня-то за что так?)


 
Сергей М. ©   (2008-11-08 17:12) [63]


> Alex_Ford


А кто будет кликать на крыжиках в чеклистбоксе ?

Неужели тот самый юзер, целый раб.день только и играющийся в  цацки вместо выполнения прямых служ.обязанностей ?

Он что, настолько тупорылый, что своими же руками (с пом. любезно предоставленной тобой приблуды с чеклистбоксами и батоном) убивать милые его сердцу цацки и закрывать разные непотребные папки ?)


 
Riply ©   (2008-11-08 17:26) [64]

> [63] Сергей М. ©   (08.11.08 17:12)
> А кто будет кликать на крыжиках в чеклистбоксе ?

Это уже следующая задача.
Пусть человек "покопается" в коде, который ему дали,
разберет его по косточкам (или по битикам :)).
Может и будет результат.
Во всяком случае, он упорен. Так что шанс есть :)


 
Anatoly Podgoretsky ©   (2008-11-08 18:40) [65]

> Loginov Dmitry  (08.11.2008 16:41:02)  [62]

Ты под разбор случайно попался.


 
Johnmen ©   (2008-11-08 20:01) [66]


> Riply ©   (08.11.08 17:26) [64]
> Может и будет результат.

Эт вряд ли (c)

> Во всяком случае, он упорен.

В выпрашивании сырцов?

> Так что шанс есть :)

Наивная...


 
Leonid Troyanovsky ©   (2008-11-09 00:29) [67]


> Alex_Ford   (08.11.08 14:38) [57]

> Но. когда список достигает около 200-300 элементов с активным
> свойством checked, то программа ужасно сильно тормозит.

Для поиска лучше использовать не checklistbox,
а, например, TStringList (Sorted = true) and Find.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-11-09 00:38) [68]


> Riply ©   (08.11.08 17:26) [64]

> Может и будет результат.

Шанс исправиться есть.
Т.е., учесть все замечания, уточнить постановку задачи,
проработать код и показать его здесь.
Тогда и увидим.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-11-09 00:58) [69]


> Сергей М. ©   (08.11.08 17:12) [63]

> и батоном) убивать милые его сердцу цацки и закрывать разные
> непотребные папки ?)

Дык, это ж будет "скыртый" процесс :)

А с папками во-ще непонятно.
Видимо, имелось ввиду закрытие найденных по их заголовкам
окон проводника. Но это весьма наивный путь.

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

--
Regards, LVT.


 
Johnmen ©   (2008-11-09 01:08) [70]


> Leonid Troyanovsky ©   (09.11.08 00:58) [69]
> Дык, это ж будет "скыртый" процесс :)

"скыртый роцесс", не надо переосмысливания...:)))


 
Leonid Troyanovsky ©   (2008-11-09 01:26) [71]


> Johnmen ©   (09.11.08 01:08) [70]

> "скыртый роцесс", не надо переосмысливания...:)))

Вторую часть запамятовал, виноват.

--
Regards, LVT.


 
Германн ©   (2008-11-09 01:33) [72]


> Leonid Troyanovsky ©   (09.11.08 01:26) [71]

Эк тебя понесло! Четыре сообщения в одной ветке за менее чем час!
:)



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.66 MB
Время: 0.048 c
2-1226464717
Gans
2008-11-12 07:38
2008.12.21
Отчеты в Xls


10-1150442838
RomanH
2006-06-16 11:27
2008.12.21
Программно задать OLE-сервер


15-1224594136
Ega23
2008-10-21 17:02
2008.12.21
Абрамов, отзовись!


15-1224039909
МемТест
2008-10-15 07:05
2008.12.21
Как использовать второе ядро двухъядерного процессора?


3-1211888660
Dmitry_177
2008-05-27 15:44
2008.12.21
Дата/ДатаВремя в SQL запросах БД Access





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский