Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2009, 08:03   #1
JustLikeFar
Новичок
Джуниор
 
Регистрация: 19.08.2009
Сообщений: 3
Счастье Нити в процессе

Здравствуйте... извиняюсь конечно если баян по вопросу,но я юзал поиск и даж в ручную читал темы по ВИНАПи!!Оо =)
ВОбще суть вопроса такая,мне нужно убить нить в процессе как она только появится(я знаю ее имя),и еще одну заСУСПЕНДить... объясните,пожалуйста,поподробнее... я оч плохой мастер делфи!Мое предназначение РНР=)Делфи только начал изучать))
Заранее благодарен. С.У. JustLikeFar
JustLikeFar вне форума Ответить с цитированием
Старый 19.08.2009, 08:56   #2
JustLikeFar
Новичок
Джуниор
 
Регистрация: 19.08.2009
Сообщений: 3
По умолчанию

Цитата:
Сообщение от JustLikeFar Посмотреть сообщение
Здравствуйте... извиняюсь конечно если баян по вопросу,но я юзал поиск и даж в ручную читал темы по ВИНАПи!!Оо =)
ВОбще суть вопроса такая,мне нужно убить нить в процессе как она только появится(я знаю ее имя),и еще одну заСУСПЕНДить... объясните,пожалуйста,поподробнее... я оч плохой мастер делфи!Мое предназначение РНР=)Делфи только начал изучать))
Заранее благодарен. С.У. JustLikeFar
потокдругой программы,не у себя в приложении...
JustLikeFar вне форума Ответить с цитированием
Старый 19.08.2009, 09:28   #3
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от JustLikeFar Посмотреть сообщение
мне нужно убить нить в процессе как она только появится(я знаю ее имя),и еще одну заСУСПЕНДить... объясните,пожалуйста,поподробнее...
у нитей нет имён, различить одну нить от другой очень сложно.

А так вот функции
createtoolhelp32snapshot(TH32CS_SNAPTHREAD,...)
Thread32First
Thread32Next
Потом
OpenThread
SuspendThread
TerminateThread
rpy3uH вне форума Ответить с цитированием
Старый 19.08.2009, 10:26   #4
JustLikeFar
Новичок
Джуниор
 
Регистрация: 19.08.2009
Сообщений: 3
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
у нитей нет имён, различить одну нить от другой очень сложно.
ну как то же их реально отличить?????
вобщем все равно спасибо!!!
JustLikeFar вне форума Ответить с цитированием
Старый 19.08.2009, 14:04   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

можно отличить по косвенным признакам. например, по времени на процессоре, или адресу TEB
rpy3uH вне форума Ответить с цитированием
Старый 22.08.2009, 10:25   #6
VladimirVB
Форумчанин
 
Аватар для VladimirVB
 
Регистрация: 12.10.2008
Сообщений: 131
По умолчанию

ОДИН ПОТОК МОЖЕТ ЗАВЕРШИТЬ ДРУГОЙ ПОТОК

Код:
function TerminateThread(
hThread: THandle; 	//дескриптор потока
dwExitCode: DWORD	//код завершения потока
): BOOL; stdcall;
В случае успешного завершения функция TerminateThread возвращает ненулевое значение, в противном случае — FALSE. Функция
TerminateThread завершает поток, но не освобождает все ресурсы, принадлежащие этому потоку. Это происходит потому, что при выпол-нении этой функции система не посылает динамическим библиотекам, загруженным процессом, сообщение о том, что поток завершает свою работу. В результате динамическая библиотека не освобождает ресурсы, которые были захвачены для работы с этим потоком. Поэтому эта функция должна вызываться только в аварийных ситуациях при зависании потока.

пример:
Код:
program TerminateThreadd;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

var
  count: Cardinal = 0;
  hThread: HWND;
  IDThread: DWORD;
  c: Char;
  b: Boolean = True;

procedure thread; stdcall;
var
  b: Boolean;
begin
  b := True;
  while b do
  begin
    count := count + 1;
    Sleep(100); // немного отдохнем
  end;
end;

begin
  hThread := CreateThread(nil, 0, @thread, nil, 0, IDThread);
  while b do
  begin
    Write('Input ''y'' to display the count or any char to finish: ');
    Readln(c);
    if c = 'y' then
      Writeln('count = ', count)
    else
      Break;
  end;

  //прерываем выполнение потока thread
  TerminateThread(hThread, 0);

  //закрываем дескриптор потока
  CloseHandle(hThread);
end.
VladimirVB вне форума Ответить с цитированием
Старый 23.08.2009, 17:32   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от VladimirVB Посмотреть сообщение
ОДИН ПОТОК МОЖЕТ ЗАВЕРШИТЬ ДРУГОЙ ПОТОК
спасибо за то что просвятил. а толку то? нам надо завершать чужой поток

Последний раз редактировалось rpy3uH; 23.08.2009 в 17:34.
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PageControl. в процессе проектировки формы создать несколько вкладок. GN_ Помощь студентам 7 15.11.2011 20:56
Можно ли подсчитать FPS в другом процессе? Minimus Win Api 7 26.08.2008 02:08
Блокировка функции в процессе ее работы Andr180nag JavaScript, Ajax 2 11.08.2008 18:07
В среде Delphi составить программу (процесс), который паралельно запускает два потока (нити) metamfetamin Помощь студентам 9 06.11.2007 15:26
Как программно нажать клавишу в чужом процессе? Sere0ga Win Api 2 27.03.2007 18:43