|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
|  | 
| 
			 
			#1  
			
			
			
			
		 | ||||
| 
 | ||||
|  Синхронизация потоков У меня вопрос, делал синхронизацию(synchronize) при работе с Label и memo из потока, но все равно баги были страшные пришлось убрать, с чем могло быть связанно? не из за того что в этот момент могла быть работа из основного кода с этим же memo? | 
| 
			 
			#2  
			
			
			
			
		 | |||
| 
 | |||
|   сомнительно, этот метод как раз и предназначен для того, что бы основной поток и дополнительный не мешались. Вообще, для синхронизации преднвзначен объект TCriticalSection. | 
| 
			 
			#3  
			
			
			
			
		 | ||||
| 
 | ||||
|   показал бы "не правильно работающий код" с Synchronize? | 
| 
			 
			#4  
			
			
			
			
		 | ||||
| 
 | ||||
|   Код:  addmesseg:='(' + DateTimeToStr(Now()) + ') '+'отправлен запрос в плагин=> '+ UIN;
 Memo2.Lines.Add(addmesseg);
 writeln(logfile1,addmesseg);
 inc(statistik1);
 Label1.Caption:=IntToStr(statistik1);
 @plugExec := GetProcAddress(PPluginInfo(listKomand.Items[n1])^.handle,'PluginExec');
 Result:=PlugExec(UIN, Msg,PPluginInfo(listKomand.Items[n1])^.Index);
 i:=random(10);
   case i of
    0: ;
    1: Result:=Result+#10#13+rekl1.text;
    2: Result:=Result+#10#13+rekl2.text;
    3: Result:=Result+#10#13+rekl3.text;
    4: Result:=Result+#10#13+rekl4.text;
    5: Result:=Result+#10#13+rekl5.text;
    6: Result:=Result+#10#13+rekl6.text;
    7: Result:=Result+#10#13+rekl7.text;
    8: Result:=Result+#10#13+rekl8.text;
    9: Result:=Result+#10#13+rekl9.text;
  end;
form1.MessageSend(UIN,Result,nomer);ну и в программе этот поток ежесекундно раз по 3-5 вызывался изначально все было нормально, через минут 5 потом "началось" | 
| 
			 
			#5  
			
			
			
			
		 | ||||
| 
 | ||||
|   а если оставить только это: Код: var
  addmesseg: String;
begin
  addmesseg:='(' + DateTimeToStr(Now()) + ') '+'отправлен запрос в плагин=> 100';
 Memo2.Lines.Add(addmesseg);
// writeln(logfile1,addmesseg);
// inc(statistik1);
 Label1.Caption:=IntToStr(99);
end; | 
| 
			 
			#6  
			
			
			
			
		 | ||||
| 
 | ||||
|   не знаю, такое не могу протестировать с той нагрузкой с которой должно работать. |