Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > 2 процедуры одновременно


Автор: MaGICaN 5.8.2007, 18:10
Подскажите как реализовать:
1 Процедура работает, но ее выполнение было приостановлено виндой(вылезло окошко с вариантами ок и отмена, как нажать на кнопку я знаю), как сделать так, чтобы автоматом вкючилась другая процедура, выполнив свой код, первая процедура продалжила работу.

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

Автор: Yanis 5.8.2007, 18:24
http://webhelp.ru/

Автор: W1zArD 5.8.2007, 20:46
потоки?
да скорее всего...
http://forum.vingrad.ru/forum/topic-163841/kw-tthread-потоки-многопоточность-threads.html

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

Автор: ALeXandrK 5.8.2007, 20:56
А обычные условные переходы здесь неприменимы????
Вопрос неполностью раскрыл суть твоей проблемы! Очень поверхностно! smile 

Автор: Демо 5.8.2007, 22:25
Цитата(MaGICaN @  5.8.2007,  18:10 Найти цитируемый пост)
но тут вылазит окошко ок и отмена


Окно диалоговое из-за ошибки появляется?
Если да, то используй обработку исключений.

Автор: Sunvas 6.8.2007, 23:52
Цитата(MaGICaN @  5.8.2007,  18:10 Найти цитируемый пост)
но ее выполнение было приостановлено виндой

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

Автор: MaGICaN 7.8.2007, 21:54
пожалуйстя, кому не лень покажите пожалуйста примерный код одновременного выполнения двух процедур.
спасибо

Автор: W4FhLF 8.8.2007, 07:20
Код

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

type
  TForm1 = class(TForm)
    procedure ReceiveMessage (var Msg: TMessage); message WM_USER+$100;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  add,i:integer;
  ThID: dword;
  const WM_FINISH = WM_USER+$100;
implementation

{$R *.dfm}

function ThreadProc(): dword; stdcall;
begin
    for i:=0 to 600000000 do add:=i;
    PostMessage(Form1.Handle,WM_FINISH,0,0);
end;

procedure TForm1.ReceiveMessage (var Msg: TMessage);
begin
    ShowMessage(IntToStr(add));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    ThID:=CreateThread(nil,128*1024,@ThreadProc,nil,0,ThID);
end;


Автор: dumb 8.8.2007, 11:36
Цитата(W4FhLF @  8.8.2007,  07:20 Найти цитируемый пост)
ThID:=CreateThread(nil,128*1024,@ThreadProc,nil,0,ThID);
+CloseHandle(ThID); smile

а вообще, лучше юзать TThread или BeginThread, иначе IsMultiThread руками в true ставить и хэндлы закрывать...

Автор: W4FhLF 8.8.2007, 11:40
Цитата(dumb @  8.8.2007,  11:36 Найти цитируемый пост)
+CloseHandle(ThID);


Тата, простите, как я мог smile smile

Автор: MaGICaN 8.8.2007, 13:49
а где сами процедуры то писать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)