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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2010, 22:41   #1
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию Multithread

Multithread что это такое и чем он лучше обычного. За нубский вопрос сорри, просто в сети о нём написано по английски и не внятно.
bulldog5293 вне форума Ответить с цитированием
Старый 12.09.2010, 22:49   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я вам переведу, это многопоточность.
дальше обьяснять?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.09.2010, 22:52   #3
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Вот тут можно посмотреть вкратце
_Engine_ вне форума Ответить с цитированием
Старый 13.09.2010, 01:06   #4
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

А нет ли у кого примера с этим Multithread, а то чёт не понятно как с ним работать, а то ели понял как с thread работать, а тут ещё это
bulldog5293 вне форума Ответить с цитированием
Старый 13.09.2010, 01:45   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а многопоточность это и есть создание дополнительных потоков для обработки действий в фоне, не вешая основного потока
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.09.2010, 07:46   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Вы в каком контексте это спрашиваете?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 13.09.2010, 10:23   #7
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Цитата:
Пепел Феникса а многопоточность это и есть создание дополнительных потоков для обработки действий в фоне, не вешая основного потока
thread тоже в сети описан как многопоточный путь, но теперь как я понимаю его принцеп многопоточности составляет не полную загруженность vcl потока и обработку своего, что оставляет в блокирующем состояние остальные обращения к vcl потокам из не vcl потока, то есть если я хочу получить доступ к элементам vcl из не vcl потока, то мне придётся ждать, а multithread я как понял помогает этого избежать резервированием имени для каждого запущенного элемента потока vcl.
Ну есть у меня не vcl поток, который при нажатие кнопки обращается к vcl потоку и береводить работу на не vcl поток, я хотел бы узнать как можно его переделать под multithread.
Цитата:
GunSmoker Вы в каком контексте это спрашиваете?
надеюсь пояснил правельно
bulldog5293 вне форума Ответить с цитированием
Старый 13.09.2010, 10:32   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

сама vcl рассчитана на Synchronize метод.(кстати на практике вполне можно и обойтись, но не советую)
зачем велосипед делать?

можно сообщения контролам слать(например нажатие на кнопку, или же форме слать свое сообщение, в обработчике которого делать то что надо)

вообще очень многое можно вынести из основного потока, оставить лишь обработку сообщений(чтоб рисовалось) а остальное в иных потоках.(обновлять можно из потока)

мультипоточность обычно использует блокировки обьектов, не vcl это

приведите пример, изза чего вы этим заинтересовались?

vcl сделана так, что при вызове метода через Synchronize он выполняется в главном потоке(соответственно тот временно простаивает).
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 13.09.2010 в 10:35.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.09.2010, 10:36   #9
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

в потоке обрабатывается определенные данные, которые например нельзя поместить в цикл, таймер и тд... а синхронизация позволяет "слится" с общим потоком, НО синхронизация должна быть правильно применена. синхронизация применяется только при обновлении какой либо информации или выводе её на дисплей, иначе это бессмысленно.

как-то так
ZuBy вне форума Ответить с цитированием
Старый 13.09.2010, 11:57   #10
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Писал я код который должен заходить на все сайты которые попещенны в элементы listview, но фара была в том что он выполнялся последовательно.
Вод код потока
Код:
constructor PayThread1.Create;
begin
   Create(True); 
   FreeOnTerminate := True; 
   OnTerminate := ThreadExit; 
   Priority := tpNormal; 
   Inc(alive); 
   Resume;
end;

procedure PayThread1.Execute;
var
IdHTTP1_Pay:TIdHTTP;
i : integer;
st:TStringStream;
str:AnsiString;
s:TStringStream;
URL_Pay:String;
Login:String;
Pass:String;
data1:TStringList;
begin
idHTTP1_Pay := TidHTTP.Create(nil);
s:=TStringStream.Create;
st:=TStringStream.Create;
 data1:=tstringlist.create;
begin
  for i:=0 to Form2.Listview1.Items.count-1 do
  begin
  URL_Pay := '' + Form2.Listview1.Items[i].SubItems[0];
  Login := '' + Form2.Listview1.Items[i].SubItems[1];
  Pass := '' + Form2.Listview1.Items[i].SubItems[2];
  begin
Form2.IdHTTP1_Pay.get('' + URL_Pay + 'login.php?r=',s);
If pos('image.php?', s.datastring)>0 then
begin
...
end
else
Data1.Add('username=' +Login);
Data1.Add('password=' + Pass);
Form2.IdHTTP1_Pay.Post('' + URL_Pay+'login.php',data1,s)
end;
s.position:=0;
st:=TStringStream.Create;
Form2.IdHttp1_Pay.Get('' + URL_Pay+'sites.php', st);
str:=st.DataString;
while Pos('view.php?ad=', str) > 0
do begin
...
end;
  try
      except
       on E:Exception do
      end;
end;
end;
end;
end;
end;
и код кнопки вызова потока
Код:
procedure TForm1.But_Pay_Button1Click(Sender: TObject);
var
s : integer; 
Pay: PayThread1;
   begin
    Pay:=PayThread1.Create(false);
    Pay.FreeOnTerminate := True;
    Pay.Resume;
  end;
bulldog5293 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск