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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2012, 17:52   #1
danil123
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 80
По умолчанию Многопоточность

Пытаюсь сделать в программе многопоточность, но, увы, не получается.
Код unit 1(основной)
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, IdCookieManager, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack,
  IdSSL, IdSSLOpenSSL,xpman,unit2 ;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
    IdCookieManager1: TIdCookieManager;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    OpenDialog2: TOpenDialog;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label8: TLabel;
    Memo2: TMemo;
    Memo3: TMemo;
    Memo4: TMemo;
    Edit3: TEdit;
    Button4: TButton;
    OpenDialog3: TOpenDialog;
    Memo5: TMemo;
    Memo6: TMemo;
    Memo7: TMemo;
    Memo8: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}




procedure TForm1.Button1Click(Sender: TObject);
var pot:potok;
begin
pot:=potok.Create(true);
pot.FreeOnTerminate:=true;
pot.Resume;
    end;
   end.
код Unit2(поток)
Код:
unit Unit2;

interface

uses
  Classes,Windows, Messages, SysUtils, Variants,Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, IdCookieManager, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack,
  IdSSL, IdSSLOpenSSL,xpman;

type
  potok = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

implementation
procedure potok.Execute;
var st:tstringlist;
i,j,k,p,z,s,f,pr,t,v:integer;
begin
idHttp1.ReadTimeout:=15000;
idHttp1.ConnectTimeout:=10000;
end;
end.
Суть в том, что unit2 не видит не idhttp1, ни любой другой функции и выдает кучу эрроров. Помогите, пожалуйста.
danil123 вне форума Ответить с цитированием
Старый 19.12.2012, 18:06   #2
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Цитата:
Сообщение от danil123 Посмотреть сообщение
Суть в том, что unit2 не видит не idhttp1, ни любой другой функции и выдает кучу эрроров. Помогите, пожалуйста.
Добавь в uses Unit1.
Lardes вне форума Ответить с цитированием
Старый 19.12.2012, 18:38   #3
danil123
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 80
По умолчанию

Lardes, бесполезно, все равно не видит
danil123 вне форума Ответить с цитированием
Старый 19.12.2012, 18:40   #4
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Код:
procedure potok.Execute;
var st:tstringlist;
i,j,k,p,z,s,f,pr,t,v:integer;
begin
Form1.idHttp1.ReadTimeout:=15000;
Form1.idHttp1.ConnectTimeout:=10000;
end;
Lardes вне форума Ответить с цитированием
Старый 19.12.2012, 18:41   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Уточню, юните2 uses unit1 надо писать не в interface, а в implementation, иначе зацикливание будет

И почитай про синхронизацию.

И даже с синхронизацией могут быть ошибки в виду ассинхронности

Создавай динамический компонент, иначе грабли могут быть
eoln вне форума Ответить с цитированием
Старый 19.12.2012, 19:48   #6
danil123
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 80
По умолчанию

прописал в implementation, все равно http://gyazo.com/a54a693aec8cc089a7e03d461356eafb
danil123 вне форума Ответить с цитированием
Старый 19.12.2012, 20:06   #7
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Мой пост был уточнением. Lardes написал про явное указание модуля(формы)
Это будет выглядеть так. НО! В данном случае не вижу никакого смысла многопоточности. Хотя... всякое бывает.
Код:
...
type
  potok = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
    procedure synch;
  end;

implementation
uses unit1;
procedure potok.synch;
var st:tstringlist;
i,j,k,p,z,s,f,pr,t,v:integer;
begin
form1.idHttp1.ReadTimeout:=15000;
form1.idHttp1.ConnectTimeout:=10000;
end;

procedure potok.Execute;
begin
  synchronize(synch);
end;
...
eoln вне форума Ответить с цитированием
Старый 19.12.2012, 20:17   #8
danil123
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 80
По умолчанию

не сразу заметил, что вы form1 дописали. Да, ошибка вроде исчезла, сейчас попробую дописать
danil123 вне форума Ответить с цитированием
Старый 19.12.2012, 20:25   #9
danil123
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 80
По умолчанию

Почему программа подвисает на время выполнения? Ведь она должна благодаря потоку не виснуть.
danil123 вне форума Ответить с цитированием
Старый 19.12.2012, 20:31   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

синхрониз блокирует все потоки на момент выполнения синхрониз-метода.
итого у вас нет смысла в этом коде вообще.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многопоточность garyanikin Работа с сетью в Delphi 5 16.11.2012 14:24
Многопоточность alex0097 Общие вопросы Delphi 3 05.05.2011 22:46
Многопоточность WennY Общие вопросы Delphi 11 23.04.2011 00:46
Многопоточность boo_mago Общие вопросы C/C++ 7 21.03.2011 21:23
Многопоточность Dezmont_ Общие вопросы .NET 1 06.11.2010 18:34