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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2009, 22:55   #1
gr1ngo
Новичок
Джуниор
 
Регистрация: 10.12.2009
Сообщений: 3
По умолчанию Потоки в делфи

Всем привет. Нужно реализовать в потоке постоянную запись содержимого поля memo в файл. Т.е. если что то меняется - сразу идет запись в файл.

Без потока все легко

Код:
procedure TmForm.mmOutputChange(Sender: TObject);
  begin
    Savedialog.FileName:='Analis.txt';
    if SaveDialog.Execute
      then mmOutput.lines.SaveToFile(Savedialog.FileName)
  end;
А как все это реализовать с использованием потока?

Модуль потока:

Код:
unit Unit4;

interface

uses
  Classes;

type
  ThreadKurs = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

implementation

uses Unit1;

procedure ThreadKurs.Execute;
  begin
    cs.enter;
    mform.mmOutput.lines.SaveToFile(mform.Savedialog.FileName);
    cs.leave;
  end;

end.
Процедура onChange:

Код:
procedure TmForm.mmOutputChange(Sender: TObject);
  begin
    if Save = true then
      Thread1.Resume;
  end;
Процедура onClick кнопки "Начать запись":

Код:
procedure TmForm.StartClick(Sender: TObject);
  begin
    Savedialog.FileName:='Analis.txt';
    if SaveDialog.Execute
      then Save := true
  end;
Процедура FormCreate:

Код:
procedure TmForm.FormCreate(Sender: TObject);
  begin
    Thread1 := ThreadKurs.Create(True);
    Thread1.Priority := tphighest;
    cs := tcriticalsection.create;
  end;
Т.е. я путаюсь использовать критичекую секцию. Но судя по всему используя ее настолько криво, что больше 3 строчек из 5000 он записать не успевает(((( Помогите пожалуйста((
gr1ngo вне форума Ответить с цитированием
Старый 10.12.2009, 23:05   #2
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

эммм.... вот эта строка меня смущает:
Код:
mform.mmOutput.lines.SaveToFile(mform.Savedialog.FileName);
Помоему я прав =))) вам в помощь такое понятие как Синхранизация =))) и критическая секция помоему не к месту =( Грубо говоря (если я не ошибаюсь) КС не в данном случаи не регулирует процесс "обращения" к Tmemo.Lines между нитями главной формы и вашего Thread1.... он тут тупо стоит =(
Помог? Ну так нажми на весы!

Последний раз редактировалось SNUPY; 10.12.2009 в 23:09.
SNUPY вне форума Ответить с цитированием
Старый 11.12.2009, 00:49   #3
gr1ngo
Новичок
Джуниор
 
Регистрация: 10.12.2009
Сообщений: 3
По умолчанию

Полностью убрал критическую секцию. В модуле потока написал следующее:

Код:
procedure write2file;
  begin
    mform.mmOutput.lines.SaveToFile(mform.Savedialog.FileName);
  end;

procedure ThreadKurs.Execute;
  begin
    Synchronize(write2file);
  end;
Вызывает ошибку "There is no overloaded version of 'Synchronize' that can be called with these arguments."

Цитата:
Сообщение от SNUPY Посмотреть сообщение
эммм.... вот эта строка меня смущает:
Код:
mform.mmOutput.lines.SaveToFile(mform.Savedialog.FileName);
Можно узнать, что нитак?

Почему то синхронизация вызывает у меня самые сильные проблемы. Ваще не понимаю как ею пользоваться(((

Последний раз редактировалось gr1ngo; 11.12.2009 в 00:51.
gr1ngo вне форума Ответить с цитированием
Старый 11.12.2009, 01:07   #4
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Эммм помоему write2file надо сделать методом потока =)
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 11.12.2009, 02:24   #5
gr1ngo
Новичок
Джуниор
 
Регистрация: 10.12.2009
Сообщений: 3
По умолчанию

2 SNUPY

Все заработало) Спасиб)
gr1ngo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки в делфи!!! S_Yevgeniy Общие вопросы Delphi 6 13.10.2009 14:20
Потоки AidarBik Win Api 2 04.08.2008 10:00
Потоки в С Raptor Помощь студентам 1 07.01.2008 21:12