Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Создать несколько екземпляров компонента


Автор: X-Vlad 19.4.2004, 15:42
Привет всем.


Сервер. Ждёт конекта клиента. Клиент посылает команду. Сервер работает с базой даных Интербейс. Когда один клиент то нормально обрабатывается, а когда много ничего неработает. Я решил реализовать ето дело в потоках (TThread). Но незнаю как. (никогда с етим неработал) хочу научится. Можете мне подсказать?. Дома куча книг по Дельфи и ни в одной нет инфы о Потоках. sad.gif

Когда клиенты конектятся то для них создается отдельный поток (нашел пример). А вот как мне реализовать работу с базой в отдельных потоках?

делал так: (работает для одного клиента)
Код
Var
zname:string;
ZalQuery1:TIBQuery;
ZalDatabase1: TIBDatabase;
ZalTransaction1: TIBTransaction;
begin
try
 try
  ZalQuery1:=TIBQuery.Create(aowner);
  ZalDatabase1:=TIBDatabase.Create(aowner);
  ZalTransaction1:=TIBTransaction.Create(aowner);
  ZalDataBase1.DatabaseName:=dm2.DataBase1.DatabaseName;
  ZalDataBase1.Params.Text:=dm2.Database1.Params.Text;
  ZalDataBase1.LoginPrompt:=false;
  ZalDataBase1.DefaultTransaction:=ZalTransaction1;
  ZalQuery1.Database:=ZalDataBase1;
  ZalQuery1.Transaction:=ZalTransaction1;
  ZalDataBase1.Connected:=true;

    ZalQuery1.Active:=false;
    ZalQuery1.SQL.Clear;
    ZalQuery1.SQL.Add('select * from ZALFORZAMOVLENYA('+id+')');
    ZalQuery1.Active:=true;
    ZalQuery1.FetchAll;
....
 except
  on e:exception do
   begin
    result:=false;
    dm.Display('..Ошибка..... '+e.message,MYSERVER,I_ERRORMSG);
    exit;
   end;
 end;
finally
 ZalQuery1.Free;
 ZalDatabase1.Free;
 ZalTransaction1.Free;
 result:=true;
end;
end;


как мне реализовать ето дело, что-бы работало с несколькими клиентами?
Если можна кусочек кода... smile.gif

(Есть много магазинов - пишу програму для синхронизации остатков товара на складах. Сервер и клиент реализованы на Socket)


Зарание благодарен.

Автор: Mr.Picwick 19.4.2004, 21:22
Посмотри о потоках в
1) "Программирование в Delphi7" Дарахвелидзе,Марков BHV - мне понравилось
как здесь написано
2) "Программирование в Delphi7" Архангельский

Автор: X-Vlad 20.4.2004, 10:08
Может кто-то пример может кинуть?

Автор: Georg4 20.4.2004, 11:38
Как и все честные люди, начнем с нуля.
У меня дома документация больше, это то что нашел сразу вроде бы все нормально написано
http://uchenik.vofka.ru/my_files/Thread.ZIP

Автор: Akella 20.4.2004, 11:40
а в FAQ не лазил?

Автор: X-Vlad 20.4.2004, 12:57
Как мне подождать пока выполнится поток?

Например вот такой код:

Код

procedure TMyThread.execute;
Var
i:integer;
begin
i:=0;
repeat
  i:=i+1;
 sleep(100);
until i>10000;
end;

procedure start;
begin
mythread:=MyThreadClass.Create(true);
mythread.FreeOnTerminate:=true;
mythread.suspended:=false;
end;

procedure click;
begin
start;
showmessage('end');
end;



что надо зделать что-бы сообщение показывалось после завершения работы потока?

Зарание благодарен.

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