Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
g3nchik
6 / 6 / 0
Регистрация: 17.08.2012
Сообщений: 170
1

Дублируется вывод информация из потока

11.05.2015, 19:48. Просмотров 310. Ответов 4
Метки нет (Все метки)

В общем, каждый поток получает информацию со странички с разным id, т.е потоки синхронно работают с разными страницами, но иногда эта информация дублируется, т.е:
Кликните здесь для просмотра всего текста

Код
hklkv / 487
fkplv / 498
dmlkv / 489
xulhv / 499
fdlnk / 500
fdlnk / 500
fdlnk / 500
fdlnk / 500
fdlnk / 500
fdlnk / 500


Поток зависает или что ?
Чем больше потоков, тем более не стабильно они работают. Или чем хуже процессор тем не стабильнее они будут работать ?
При 1'ом потоке все замечательно.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, XPMan, SyncObjs, IdBaseComponent,
  IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, Spin;
 
 
type
  TForm1 = class(TForm)
    Button4: TButton;
    idhtp1: TIdHTTP;
    lst1: TListBox;
    se1: TSpinEdit;
    edt1: TEdit;
    procedure Button4Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
 
  public
    { Public declarations }
  end;
 
  // Äëÿ ïîêГ*Г§Г* ïðèìåðîâ Гї ñîçäГ*Г¬
  // 3 Г°Г*Г§Г*ûõ ГЄГ«Г*Г±Г±Г*, Г*Г*ñëåäГ*ГЁГЄГ* TThread
 
 
 
  Thread = class(TThread)
  public
 
  private
 
  protected
    procedure Syn;
    procedure Execute; override;
    constructor Create(CreateSuspended: Boolean);
  end;
 
var
  i: integer;
  Work: Boolean;
  Form1: TForm1;
  cs: TCriticalSection;
  Id: string;
 
implementation
 
{$R *.dfm}
 
{ TSyncThread }
 
 
 
constructor Thread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;
 
procedure Thread.Execute;
var
  HTTP: TIdHTTP;
  a: Integer;
begin
 
  while Work do
   begin
     cs.Enter;
     Inc(i);
     if i<=500 then  a:=i else Work:= false;
     cs.Leave;
 
 
     if Work then
      begin
 
        Sleep(500);
 
        HTTP:= TIdHTTP.Create(nil);
        HTTP.ReadTimeout:= 3000;
        HTTP.HandleRedirects:= false;
 
        try
          Id:= HTTP.Get('http://test1.ru/i.php?id='+IntToStr(a));
        finally
          HTTP.Free;
          Synchronize(Syn);
        end;
      end;
 
   end;
end;
 
 
procedure TForm1.Button4Click(Sender: TObject);
var
  Thr: Thread;
  c: integer;
begin
  Work:= True;
  i:= -1;
  for c:=1 to 200 do
   begin
 
    Thr:= Thread.Create(false);
   end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 
   CS:=TCriticalSection.Create;
end;
 
procedure Thread.Syn;
begin
  form1.lst1.Items.Add(Id)  ;
end;
 
end.
Добавлено через 15 минут
Хотя даже при 3х потоках есть дубли..
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2015, 19:48
Ответы с готовыми решениями:

Дублируется вывод foreach
Есть функция: function findPopularDirection() { global $geo; $currency =...

Дублируется вывод буквы
Почему выводится буква дважды? Вот код и вывод консоли: #include &lt;stdio.h&gt; int main(void) { ...

Set не работает, и вывод списка дублируется
базовый класс Banner - здесь все норм class Banner { protected: string bannerName; // name of...

Информация с радио потока
Здравствуйте. Подскажите возможно ли с радио потока получать название песни и исполнителя. ...

Вывод из потока
Здравствуйте. Помогите пожалуйста разобраться почему код не хочет работать. #include &lt;iostream.h&gt;...

4
mss
11.05.2015, 19:49
  #2

Не по теме:

Чем больше балбесов, бездумно передирающих код, запущеный в Рунет школяром, тем хуже работают процессоры)

0
g3nchik
6 / 6 / 0
Регистрация: 17.08.2012
Сообщений: 170
11.05.2015, 19:58  [ТС] 3
Как содержательно.
0
mss
11.05.2015, 21:02
  #4

Не по теме:

А ты полюбопыстствуй хотя бы ради интереса, сколько народу здесь, сдув этот же код, получили теми же граблями по тому же месту)
Просто сделай поисковый запрос на тему "while Work" или "cs.Enter" - и удивись)

0
g3nchik
6 / 6 / 0
Регистрация: 17.08.2012
Сообщений: 170
11.05.2015, 22:59  [ТС] 5
Ладно.
Объявил переменную
Delphi
1
Id: string;
в классе Thread и теперь заработало.
0
11.05.2015, 22:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2015, 22:59

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

Вывод формы из потока
Создаю клиент/сервер. Суть: В клиенте в потоке я принимаю от сервера сообщение о том, может ли юзер...

Вывод информации из потока
Привет всем ! Есть поток public Socket socket = new Socket(AddressFamily.InterNetwork,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru