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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2015, 17:16   #1
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
Смущение Работа с потоками

Всем привет
есть программа которая работает с 2 базами(mysql & access).
Нужно постоянно проверять наличия новой информации в базах, когда была одна база постоянно делал запросы с помощю таймера, но теперь базы две и я думаю что было бы логично вынести мониторинг в отдельные два потока, с потоками еще не работал, можете посоветовать как реализовать структуру(что, где и когда описывать, вызывать?).Или как лучше сделать?
Konstantin_ua вне форума Ответить с цитированием
Старый 02.03.2015, 17:30   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Описать класс на основе опишите поток TDbInfoGet, который будет иметь строку DBId, пишите там в execute всякие выборки из баз. На основе сравнения с DBId в execute работает соотв. код.

Затем поток возвращает событие сданными OnInfoGet(Thread:DbInfoGet; Id:string; Info:TCustomData).

Потоки можно хранить TThreadList с включенной FreeObTrminate = true.
Человек_Борща вне форума Ответить с цитированием
Старый 02.03.2015, 18:05   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Или как лучше сделать?
Я бы подумал об оповещени клиентов. Через UDP Broadcast или другими доступными седствами. Под "другими" можно понять что угодно, но ...НО!!!! Йа пяный!!!.. Ну да ладно... Две базы? Мне не привидилось? Ужос. Все в одну базу. Однозночно я бы об этом подумал прежде всего. Даж есиии пяный...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.03.2015, 15:41   #4
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
Плохо

сделал так как смог, может что то подправите.

Код:
//Создаем свой класс TMyThread:
  TMyThread = class(TThread)
    private
   { Private declarations  }
  protected
    procedure Execute; override;
  end;

var
  Form1: TForm1;
  MyThread: TMyThread;

implementation
{$R *.dfm}

//функция которая будет крутиться в потоке и делать запрос к бд
function Findrecord(fqry:TZQuery):Boolean;
begin
    Result:=False; 
try
    fqry.SQL.Clear;
    fqry.SQL.Add('SELECT * FROM users');
    fqry.Active:=True;
    except
      on E:Exception do
      ShowMessage('Îøèáêà ÁÄ:'+E.message);
  end;
  if (fqry.RecordCount>0) then
   Result:=True;
end;

//реализация Execute
procedure TMyThread.Execute;
begin
   while not Findrecord(Form1.qry) do
   begin
    Sleep(2000);
   end;
    ShowMessage('Íîâàÿ çàÿâêà');
    MyThread.Free;
end;
Работает вроде бы нормально, но я так понял могут быть проблемы с Showmessage, как их предотвратить или как лучше использовать showmessage с потоков?

Последний раз редактировалось Stilet; 03.03.2015 в 19:46.
Konstantin_ua вне форума Ответить с цитированием
Старый 03.03.2015, 18:05   #5
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

showmessage вроде нельзя использовать в потоке
ДралсяСошибками вне форума Ответить с цитированием
Старый 03.03.2015, 19:40   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Считаю, что сервер должен быть сервером и не фиг ему клиентам оповещения слать. Хотя некоторые СУБД и могут это, но не мускул и access. Т.е. опрос со стороны клиента, но умный. Не опрашивать актуальные таблицы, возможно здоровенные, на предмет изменения данных, а некую служебную таблицу(цы), в которую триггера актуальных таблиц записывают информацию о своем обновлении на уровне идентификаторов записей и вида обновления. При опросе предусмотреть и обновление этой таблицы, дабы клиенту повторно не послать одно и то же. Как то так
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.03.2015, 19:41   #7
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

и это не поток... это "ждалка"
поток вечно крутится, не надо при любом шухере делать потоку Free.
а оповещать через синхнониз или постмессадж
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 03.03.2015 в 19:43.
Slym вне форума Ответить с цитированием
Старый 04.03.2015, 02:17   #8
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Считаю, что сервер должен быть сервером и не фиг ему клиентам оповещения слать.
В трёхзвенке почему бы и не па?
Всё зависит от задачи. Но сервер в трехзвенке имеет возможность оповещать клиентов об изменениях в БД.
northener вне форума Ответить с цитированием
Старый 04.03.2015, 07:54   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Может, но он сам выступает клиентом по отношению к серверу баз данных и опять 25
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.03.2015, 11:03   #10
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

а может в ассес базе подключить таблицы мускула и вернутся к решённой задаче (профит ).Они нормально подключаются через соответствующие драйвера. не катит через драйвера винды.? или у вас постоянно меняется структура таблиц и их количество? и работать только с ассесом.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.

Последний раз редактировалось IliaIT; 04.03.2015 в 11:12.
IliaIT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с потоками. bilibian Общие вопросы Delphi 14 22.02.2014 19:54
Работа с потоками ThreadDelphi Общие вопросы Delphi 3 08.04.2012 18:58
работа с потоками MetR Помощь студентам 1 04.12.2011 01:32
Работа с потоками QuadroX Помощь студентам 10 20.09.2011 14:24
работа с потоками session Общие вопросы C/C++ 6 21.06.2010 17:13