![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Запускаю поток: thread1.resume. В методе execute вызвается другой метод, в котором есть цикл. Так вот, в основной программе нажимаю кнопачку в которой прописано thread1.suspend, но почему то поток не хочет вставать на паузу. Цикл в потоке как крутился так и крутится. Что делать? Нужно поставить поток на паузу в цикле, а потом возобновить по нажатию другой кнопачки.
|
|
#2
|
||||
|
||||
|
код в студию
|
|
#3
|
|||
|
|||
|
Код показать не могу, но выглядит примерно так:
Код:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DateUtils;
type
TMyThread = class(TThread)
private
{ Private declarations }
protected
procedure MyMethod;
procedure Execute; override;
end;
implementation
uses Unit1;
{ TMyThread }
procedure TMyThread.MyMethod;
var
i: INTEGER;
j: INTEGER;
k: integer;
begin
for j := 0 to 999 do begin
...
for i := 0 to 999 do begin
...
for k := 1 to 999 do begin
...
end;
...
end;
end;
...
end;
procedure TMyThread.Execute;
begin
try
Synchronize(MyMethod);
except
end;
end.
В кнопке: Код:
procedure TForm1.bPauseClick(Sender: TObject); begin P.Suspend; //P - глобальная переменная end; Но цикл как продолжал работать, так и работает. |
|
#4
|
||||
|
||||
|
Насколько видно из кода bPauseClick у Вас срабатывает только после выполнения TMyThread.MyMethod.
Вообще непонятно зачам вам поток - единственное что он делает это выполняет TMyThread.MyMethod в основном потоке ( для этого и предназначена Synchronize ) |
|
#5
|
|||
|
|||
|
Если я сделал поток, значит он нужен. MyMethod обращается к компоненту главной формы и чтобы не возникло форсмажоров он вызывается через Synchronize
|
|
#6
|
||||
|
||||
|
Я просто не заметил многоточий в методе TMyThread.Execute.
Если он действительно содержит только то, что у Вас на писано, то сработает он таким образом: После запуска подождет основной поток, затем в основном потоке выполнит TMyThread.MyMethod ( при этом обработка сообщений производится основным потоком не будет ). Затем завершится. Соответственно выполнение метода TMyThread.MyMethod из основного потока Вы прервать не сможете. |