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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2009, 17:05   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот наскорую руку накропал такое принудительное останавливание.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
    function tf:dword;
var  tid:Cardinal; th:THandle;
  Form1: TForm1;

implementation


{$R *.dfm}
 //********** FUNCTION **********
 function tf;
 var i:DWORD;
 begin
 repeat
    GetExitCodeThread(th,i);
    form1.Caption:=TimeToStr(now)+ ' '+inttostr(i);
    sleep(100)
 until  i=11;
 end;
 //********** END FUNCTION ******  {}


procedure TForm1.FormCreate(Sender: TObject);
begin
th:=CreateThread(0,0,@tf,0,CREATE_NEW,tid);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TerminateThread(th,11);

end;

end.
Материал отсюдова:
http://wm-help.net/books-online/book.../59464-23.html
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.02.2009, 17:30   #12
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

А собственно зачем ? На мой взгляд ответ дан, пусть автор решает сам как ему будет удобно в его ситуации это сделать.
BOBAH13 вне форума Ответить с цитированием
Старый 05.02.2009, 18:02   #13
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Нет нельзя. Вы видать не понимаите что такое поток...
Согласен! Я многого ещё не понимаю. Однако, я хорошо понимаю, что должен существовать какой-то способ остановки потока. Возьмём к примеру игру FERZ, или мою реализацию этой игры (Queen Battles, собственно которая меня и побудила к написанию этой темы). Есть, экспортируемая из DLL, процедура, допустим, хода (GetStep). Так вот. Допустим, бот думает долго или вообще завис. Что, вместе с ним должна висеть и моя прога? Если сильно упростить структуру QueenBattles, то получается, что GetStep вызывается в потоке, т.е. в процедуре execute, а это значит, что пока GetStep не выполниться не выполняться и последующие строчки. Может в GetStep (демонстрируя невнимательность автора бота) запустился бесконечный цикл. Что, моя прога обречена на аварийное выключение из диспетчера задач?

Stilet, алгоритм (пост #11) не пашет. Caption у формы просто пустым делается.
Altera вне форума Ответить с цитированием
Старый 05.02.2009, 18:11   #14
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Ну если повесился код в потоке, то тут уже извените, за то что код видимо написан не верно, вам и отдуваться. Если вы хотите чтобы при возникновении такого бага в другом потоке, убить его... гм.. ну такое врятли возможно, т.к. именно этот поток в вашем процессе, значит вы за него отвечаите, а винда распределяет время по всем потокам, и только она может просто прекратить давать время этому потоку, т.е. отрубить его Но вы то, верней ваш код, будет выполнятся только тогда когда его очередь прийдет, т.е. вы не можете сделать так чтобы винда допустила вас на такой уровень, чтобы управлять очередью процессов(потоков) для обработки. Исходите только из API и того что я предложил.
BOBAH13 вне форума Ответить с цитированием
Старый 05.02.2009, 18:17   #15
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Я почитаю
Но не может быть, что-бы поток насильно нельзя было-бы остановить.
Altera вне форума Ответить с цитированием
Старый 05.02.2009, 18:24   #16
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Altera Посмотреть сообщение
Я почитаю
Но не может быть, что-бы поток насильно нельзя было-бы остановить.
Я же сказал... вам виндовс не даст права супервизора только API и дождатся очереди выполнения вашего кода
BOBAH13 вне форума Ответить с цитированием
Старый 07.02.2009, 11:17   #17
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Вроде разобрался. Вот только, как синхронизацию проводить? что-бы окна открывать и закрывать?

Последний раз редактировалось Altera; 07.02.2009 в 11:52.
Altera вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Остановка Memo Sanek777 Общие вопросы Delphi 1 11.09.2008 15:50
Ricoh Aficio FX200, замятие(остановка печати) PDVich Компьютерное железо 0 07.05.2008 10:22
Управление потоками. Запуск, остановка, приоритет потока. metamfetamin Помощь студентам 5 11.11.2007 12:45
Остановка ADODS при OnFetchProcess QuAlex БД в Delphi 0 04.10.2007 17:31