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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2009, 17:12   #1
S_Yevgeniy
Форумчанин
 
Аватар для S_Yevgeniy
 
Регистрация: 08.07.2009
Сообщений: 246
По умолчанию Многозадачный режим работы приложения?

Здравствуйте!!!
Вот возникла такая проблема. необходимо чтобы программа на делфи периодически проводила проверку пришел файл (появился в определенной папки) или нет. проблема в том чтобы это не мешала работать оператору в программе, файлов множество.
И вообще возможно такое или нет?

Заранее спасибо, как и за совет, так и за код программы.
Да прибудет с Вами свет и радость!!!

Последний раз редактировалось S_Yevgeniy; 20.08.2009 в 18:10.
S_Yevgeniy вне форума Ответить с цитированием
Старый 20.08.2009, 17:36   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

многозадачный=многопоточный

дельфийская реализация это класс TThread(New...=>New Thread Object(или class))
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 20.08.2009 в 17:40.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.08.2009, 19:46   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Вот возникла такая проблема. необходимо чтобы программа на делфи периодически проводила проверку пришел файл (появился в определенной папки) или нет.
1) в данном случае АБСОЛЮТНО нет строгой необходимости обращаться к потокам. Достаточно кинуть таймер, выставить нужный интервал проверки (желательно не очень маленький, чтобы не грузить систему понапрасну - ну, например, раз в три/пять минут) и — вперёд...

2) для проверки появления файла в определённой папке лучше воспользоваться возможностью операционной системы оповещать программу об изменениях в файловой системе - результат поиска на Гугле
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.08.2009, 07:43   #4
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) в данном случае АБСОЛЮТНО нет строгой необходимости обращаться к потокам. Достаточно кинуть таймер, выставить нужный интервал проверки (желательно не очень маленький, чтобы не грузить систему понапрасну - ну, например, раз в три/пять минут) и — вперёд...

2) для проверки появления файла в определённой папке лучше воспользоваться возможностью операционной системы оповещать программу об изменениях в файловой системе - результат поиска на Гугле
Ну, в данном случае человеку и таймер подойдёт. Я бы вообще на 2000 или даже 1000 мили секунд выставил-бы, т.к. fileExists не много ресурсов жрёт.
Altera вне форума Ответить с цитированием
Старый 21.08.2009, 08:58   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
пришел файл (появился в определенной папки) или нет
Функции:
FindFirstChangeNotification
или
ReadDirectoryChangesW [New - Windows NT]
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2009, 12:32   #6
S_Yevgeniy
Форумчанин
 
Аватар для S_Yevgeniy
 
Регистрация: 08.07.2009
Сообщений: 246
По умолчанию

Не понятно, почему вы все не рекомендуете пользоваться многозадачностью?
Или можно объяснить идею ваших предложений?
Да прибудет с Вами свет и радость!!!

Последний раз редактировалось S_Yevgeniy; 21.08.2009 в 13:07.
S_Yevgeniy вне форума Ответить с цитированием
Старый 21.08.2009, 13:25   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

S_Yevgeniy, если Вы в магазин собираетесь, чтобы купить пакет молока, заказываете грузчика и грузовую газель с водителем?..
можете сделать с многопоточностью.
но, по сравнению с вариантом с таймером напишете раз в десять больше кода, обеспечите синхронизацию основной программы и потока, защитите VCL компоненты от проблем одновременного доступа, разработаете механизм запуска (и, возможно, остановки потока) и т.д. и всё равно, если Вы в потоке будете в цикле НЕПРЕРЫВНО проверять наличие файла - Ваша основная программа (как впрочем и весь компьютер) встанут колом! Значит либо в цикле делать паузы, либо пользоваться таймером в отдельном потоке.

Да и вообще, в данном случае использование многопоточности принесёт Вам только вред.
Вам надо:
Или, по простому, просто использовать таймер (вешаете на него процедуру и всё. Она выполняется независимо от работы основного приложения!)
либо (я бы рекомендовал!) использовать WinAPI (функции ReadDirectoryChangesW или FindFirstChangeNotification).
точка.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.08.2009, 13:28   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Не понятно, почему вы все не рекомендуете пользоваться многозадачностью?
что значит все?? я тее такого не говорил. создай поток, и в нем мониторь изменения в папке при помощи мною указанных функцый.
Цитата:
Да и вообще, в данном случае использование многопоточности принесёт Вам только вред.
Не согласен. В таймере все повиснет.
Я уже с таким столкнулся когда писал монитор изменения файлов в сети.
I'm learning to live...

Последний раз редактировалось Stilet; 21.08.2009 в 13:33.
Stilet вне форума Ответить с цитированием
Старый 03.09.2009, 12:15   #9
S_Yevgeniy
Форумчанин
 
Аватар для S_Yevgeniy
 
Регистрация: 08.07.2009
Сообщений: 246
Вопрос

Здравствуйте!!!
Здесь вы пишете что можно воспользоваться таймером а можно подробнее.
Вот например нужно проверять появился ли файл через каждые 5 секунд как это осуществить. Причем начинать проверку после 5 секунд от запроса.
И что будет с программой пока таймер считает она будет ждать ответа или как?
Спасибо!!!
Да прибудет с Вами свет и радость!!!
S_Yevgeniy вне форума Ответить с цитированием
Старый 03.09.2009, 12:25   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот пример с таймером:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
 var ec: Cardinal;  ob:_OFSTRUCT;
  const a:array[1..2] of string=('File1.txt','File2.txt');
  var i:integer;
  begin
    for i:=1 to 2 do begin
     if OpenFile(pchar(ExtractFilePath(paramstr(0))+a[i]),ob,OF_SHARE_EXCLUSIVE)<>HFILE_ERROR then
         begin
           form1.ListBox1.Items.Add('Файл '+a[i]+' появился в '+TimeToStr(now));
         end;
    end;
  end;

end.
Для этого таймер нужно кинуть на форму и задать 5000 (5 сек) в свойство Interval.

Будет практически тоже самое.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести время работы приложения razzmatazz Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 23.03.2009 00:17
Помогите выбрать режим работы клиент сервер tarakan1983 Помощь студентам 4 24.10.2008 12:31
двухканальный режим работы photozaz Компьютерное железо 2 13.10.2008 00:05
Как узнать создана ли форма во время работы приложения? Avalonix Общие вопросы Delphi 4 31.05.2008 21:01
Скрытие главной формы во время работы приложения Gorin Общие вопросы Delphi 7 23.08.2007 19:44