Здравствуйте, Гость
Понедельник, 25.09.2017, 06:51
Главная Главная страница форума Регистрация Вход
Новые сообщения Участники форума Правила форума Поиск
Страница 1 из 11
Модератор форума: Ekz 
Форум » Все о Delphi » Интернет и сети » Синхронизация потоков. (Ситуация.)
Синхронизация потоков.
DublДата: Среда, 10.11.2010, 10:37 | Сообщение # 1
Ранг 3
Группа: Проверенные
Сообщений: 73
Награды: 0
Репутация: 0
Статус: Offline
Думал сперва, что все замечательно, ну как бы я все синхронизировал, но оказывается не так это. Код:

Это вот из потока.

Code
procedure rega.Execute;
var regagl:tstringlist;
regaglo,cap_sid2, put, idcap, cap, cooc, pass1, zava, putava, hash, sex :string;
ran:integer;
begin
while Work do
begin
randomize;
Synchronize(s4et4ik);
if Work then
begin
...

Вот это код счетчика, которой по идее должен выполнятся лишь одним потоком одновременно, остальные должны ждать по идее.

Code
procedure rega.s4et4ik;
begin
Inc(acc);
if acc<form1.Memo1.Lines.Count then i:=Acc else Work:=false;
end;

Далее в коде потока Execute идет:

Code
...
Synchronize(memoregacc);
form1.idhttp1 := TIDHttp.Create;
gl:=form1.idhttp1.Get('http://vkontakte.ru/');
form1.idhttp1.Free;

где memoregacc это:

Code
procedure rega.memoregacc;
begin
form1.Memolog.lines.add('Регистрируем акк '+mails[i]);
end;

Так вот, memoregacc, в memolog выводится один и тот же mail(хотя в мемо1 я ввожу 4 разных хначения) столько раз, сколько я создаю потоков, и этот мэил который выводится несколько раз, в мемо1 стоит в такой строке, номер которой соответствует кол-ву потоков. Помогите решить траблу.

 
DJ_ЕвсДата: Среда, 10.11.2010, 20:34 | Сообщение # 2
Ранг 6
Группа: Проверенные
Сообщений: 165
Награды: 3
Репутация: 1
Статус: Offline
Чёрт. Всё это инхрена не понимаю. Но интересно biggrin wacko

ПРОЙДИ ТЕСТ!!!!!
http://FIDO20.ru/test.php?4052&c=bbea2a1

 
DublДата: Среда, 10.11.2010, 21:02 | Сообщение # 3
Ранг 3
Группа: Проверенные
Сообщений: 73
Награды: 0
Репутация: 0
Статус: Offline
Блин, походу я тоже не догоняю раз не работает))
 
AdminДата: Четверг, 11.11.2010, 10:47 | Сообщение # 4
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
Дак стой, он и будет выводиться один и тот же.
Code
form1.Memolog.lines.add('Регистрируем акк '+mails[i]);

Тут же i-тый, а изменения переменной нету. Вот и выводится 0-вой.
Проверь...


Не оказываю помощь через личные сообщения и ICQ
 
DublДата: Суббота, 13.11.2010, 20:17 | Сообщение # 5
Ранг 3
Группа: Проверенные
Сообщений: 73
Награды: 0
Репутация: 0
Статус: Offline
перед этим идет. мы увеличиваем аcc и присваиваемым i асс. Я так предположил, что это верно))
Code
procedure rega.s4et4ik;  
begin  
Inc(acc);  
if acc<form1.Memo1.Lines.Count then i:=Acc else Work:=false;  
end;

Добавлено (11.11.2010, 21:52)
---------------------------------------------

Code
Acc:=-1;
i:=-1;
Work:=true;
  for Thread:=1  to strtoint(Edit1.Text) do
   rega.Create(false);
  Thread:=strtoint(Edit1.Text);
end;

так вот вызываю, помогите)) Я просто продумал все, прокрутил, по идее то все верно должно быть)))

Добавлено (13.11.2010, 20:17)
---------------------------------------------
Все допер, все сделал, многопоточность усвоил, теперь знаю что к чему))

 
Форум » Все о Delphi » Интернет и сети » Синхронизация потоков. (Ситуация.)
Страница 1 из 11
Поиск:

Copyright DelphiDevelop.ru © 2008-2017
Хостинг от uCoz