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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2012, 08:57   #11
trafbite
Форумчанин
 
Регистрация: 21.07.2007
Сообщений: 103
По умолчанию

Цитата:
Может ты просто не дождался? Я же там прикололся и задержку потока поставил рандомно... Она могла и 5 мин длиться
Поставь везде sleep(1000) должна через секунду сработать каждая. Ну или почти через секунду.
Да нет, sleep я вообще сразу на 10 поставил - уж 10 миллисекунд я точно дождался
Т.е. у тебя этот код работает норм., только у меня ошибки и один поток?
Цитата:
Кроме Тексейры и Пачеко ниче не посоветую...
Спасибо!
trafbite вне форума Ответить с цитированием
Старый 20.02.2012, 10:54   #12
trafbite
Форумчанин
 
Регистрация: 21.07.2007
Сообщений: 103
По умолчанию

Хм, я вроде как разобрался. Попробовал все это дело упростить (Stilet, в твоем коде сразу не разобрался с присваиваниями лейблов туда-сюда - нужно будет это еще "покурить").
Получается, что тут полная аналогия с одним отдельным потоком. Только мы его создаем столько раз, сколько нужно, верно?

Вот у меня обработчик нажатия кнопки на форме в unit1:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
  MyThread: TThread;
begin
  for i:=1 to 10 do MyThread:=thr.Create(false);
end;
А вот процедура Execute потока и процедура синхронизации в unit2:
Код:
procedure thr.upload;
begin
  Number:=StrToInt(Form1.Label1.Caption);
  inc(number);
  Form1.Label1.Caption:=inttostr(Number);
end;

procedure thr.Execute;
var
Rand, i, r:longint;
List:tstringlist;
begin
FreeOnTerminate:=true;
List:=TStringlist.Create;
  rand:=random(1000000000)+100000000000;
  for i:=1 to rand do inc(r);
  List.Add(inttostr(i));
  List.SaveToFile(ExtractFilePath(Application.ExeName)+inttostr(i)+'.txt');
  Synchronize(upload);
end;
Так проверил, вроде бы они работают одновременно + через диспетчер задач (мониторинг ресурсов) посмотрел - в приложении 15 потоков (правда диспетчер показывает 5 потоков уже при запуске приложения, но после старта их число увеличивается на 10 - это радует)

Вот только вопрос, надо ли вот здесь:

Код:
  List.SaveToFile(ExtractFilePath(Application.ExeName)+inttostr(i)+'.txt');
    //вот здесь начало
  Synchronize(upload);
    //вот здесь конец
end;
использовать критические секции или мьютексты? По идее то, два потока смогут и одновременно обратиться к Label1...

Поясните, пожалуйста.
trafbite вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опять про антиспам=( gunsoy PHP 5 05.01.2012 14:49
Опять про печать. СтаниславАВ Microsoft Office Excel 3 07.04.2011 07:41
Опять про каптчу kardinal94 Работа с сетью в Delphi 11 20.09.2010 20:20
Опять про кризис vasek123 Свободное общение 32 13.03.2009 16:56
Опять про гистограммму artemavd Общие вопросы Delphi 10 15.07.2008 11:44