Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> заставить прогу всё время работать, висеть в памяти и работать 
:(
    Опции темы
Romikgy
Дата 28.10.2005, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



В потоках не рекомендуется напрямую обращатся к VCL , можно доигратся до краха проги, имхо.


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
h2o
Дата 28.10.2005, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: нет
Всего: 1



а как тогда быть?
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Romikgy
Дата 28.10.2005, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Почитай это
http://forum.vingrad.ru/index.php?showtopic=60076
там много описано по потокам,
и здесь тоже есть
http://www.drkb.ru/


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
_hunter
Дата 28.10.2005, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



не рекомендуется ( хотя я таких "нерекомендаций" не слышал ) но и не запрещается smile
можно Synchronize() использовать


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
h2o
Дата 28.10.2005, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: нет
Всего: 1



http://forum.vingrad.ru/index.php?showtopic=60076 я это уже читал, но ещё раз перечитал! и ещё больше мне стало непонятно!

с синхронизацией вообще не понимаю... она вообще мне нафига нужна? у меня на форму из потока ничего не передаётся, тока - Form1.StringList.Items.Add есть. туда из TZipTV7 инфа передаётся.... а так, у меня с формы берутся настройки. нужна мне синхронизация?

я вот думаю, я запускаю в потоке процедуру, которая проверяет условие, если условие выполняется, то из этого потока, из этой процедуры запускается ещё одна процедура, в которой берутся все настройки с формы, идёт работа с Windows и запускается создание архива с помощью TZipTV7. а ведь он свои потоки ещё создаёт вроде или FileStream или что-то такое.

тоесть у меня вообще непонятно что с этими потоками! да? так ведь не делают? я всю неправильно сделал? такие алгоритмы как у меня вообще не должны работать, или пофигу что так намешано - всё должно и так работать?

вообщем как быть?
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Romikgy
Дата 28.10.2005, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146




Цитата(_hunter @ 28.10.2005, 13:43)
не запрещается

А не кто и не говорил чтозапрещается smile

Цитата(h2o @ 28.10.2005, 14:13)
нужна мне синхронизация?

Можно и без... но имхо самый безопасный способ использовать поток от борланда (т.е. класс тред) , и использовать синхронизацию при вызове
Цитата(h2o @ 28.10.2005, 14:13)
Form1.StringList.Items.Add

хотя наверное в синхро... было бы неплохо засунуть все где есть обращение к VCL

ЗЫ а вообще наааамного проще сделать таймер и засунуть в него все что хошь, никаких синхронизаций и др. вещей связаных с потоками, плюс прямой доступ безопасный к VCL и гемору меньше, хотя это твое личное дело....


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
h2o
Дата 28.10.2005, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: нет
Всего: 1



а при таймере мне ведь будет главная моя форма недоступна? у меня в таймере будут цыклы, цыклы и т.д. и к главной форме будет не обратиться, она на вермя действия таймера повиснет?
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Romikgy
Дата 28.10.2005, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Нет .... из таймера можно обращатся к любой форме, только правильно прописать обращение, и при таймере как раз и убирается загрузка проца, если конечно твои действия в таймере не долгоиграющие( забирают много времени и ресурсов машины) , тогда без потоков точно не обойтись smile
А так таймер лучшая альтернатива, чем поток ИМХО.


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
RideX
Дата 28.10.2005, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 94
Регистрация: 8.9.2004

Репутация: 2
Всего: 7



Цитата(Romikgy @ 28.10.2005, 15:39)
В потоках не рекомендуется напрямую обращатся к VCL , можно доигратся до краха проги, имхо.

Примерчик не сложный можно, интересно посмотреть как грохается прога %)

Цитата(Romikgy @ 28.10.2005, 18:51)
и при таймере как раз и убирается загрузка проца

А что, поток загружает процессор больше чем таймер? smile

PM   Вверх
Romikgy
Дата 31.10.2005, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(RideX @ 28.10.2005, 21:22)
Примерчик не сложный можно, интересно посмотреть как грохается прога

Примерчика нет, но подумай сам , существуют 2 и более потока , и если каждый попытается поменять заголовок у формы, че будет?

Цитата(RideX @ 28.10.2005, 21:22)
что, поток загружает процессор больше чем таймер?

Смотря что в потоке .... ожидание какого либо события будет постоянно есть ресурс проца в потоке, в таймере будет только на момент срабатывания его.


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
RideX
Дата 1.11.2005, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 94
Регистрация: 8.9.2004

Репутация: 2
Всего: 7



Цитата(Romikgy @ 31.10.2005, 12:54)
Примерчика нет, но подумай сам , существуют 2 и более потока , и если каждый попытается поменять заголовок у формы, че будет?

Ну, это уж у кого как smile Вот мой примерчик по твоему вопросу, здесь абсолютно не к чему придраться, не так ли?
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  szFmtTime: PChar = '%02hu:%02hu:%02hu';
  szFmtDate: PChar = '%02hu.%02hu.%04hu';

var
  hMainWnd     : HWND;

  hThreadTime  : THandle;
  ThreadTimeID : DWORD;

  hThreadDate  : THandle;
  ThreadDateID : DWORD;
  StopThreads  : Boolean = False;

  CriticalSection: RTL_CRITICAL_SECTION;
  szCaption: array[0..11] of Char;
  stm: SYSTEMTIME;

procedure MyProc01;
asm
  pushad
  push offset CriticalSection
  call EnterCriticalSection

  push offset stm
  call GetLocalTime
  xor eax,eax
  mov ax,stm.wSecond
  push eax
  mov ax,stm.wMinute
  push eax
  mov ax,stm.wHour
  push eax
  push dword ptr[szFmtTime]
  push offset szCaption
  call wsprintf
  add esp,5*4

  push offset szCaption
  push 0
  push WM_SETTEXT
  push hMainWnd
  call SendMessage

  push offset CriticalSection
  call LeaveCriticalSection
  popad
end;

procedure MyProc02;
asm
  pushad
  push offset CriticalSection
  call EnterCriticalSection

  push offset stm
  call GetLocalTime
  xor eax,eax
  mov ax,stm.wYear
  push eax
  mov ax,stm.wMonth
  push eax
  mov ax,stm.wDay
  push eax
  push dword ptr[szFmtDate]
  push offset szCaption
  call wsprintf
  add esp,5*4

  push offset szCaption
  push 0
  push WM_SETTEXT
  push hMainWnd
  call SendMessage

  push offset CriticalSection
  call LeaveCriticalSection
  popad
end;

procedure ThreadTimeProc;stdcall;
asm
@m0:
  push 500
  call Sleep
  call MyProc01
  cmp byte ptr[StopThreads],True
  jne @m0

  push 0
  call ExitThread
end;

procedure ThreadDateProc;stdcall;
asm
@m0:
  push 500
  call Sleep
  call MyProc02
  cmp byte ptr[StopThreads],True
  jne @m0

  push 0
  call ExitThread
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  InitializeCriticalSectionAndSpinCount(CriticalSection, $00001000);

  hMainWnd := Handle;

  hThreadTime := CreateThread(nil, 0, @ThreadTimeProc, nil, 0, ThreadTimeID);
  if hThreadTime = 0 then begin
    MessageBox(Handle, PChar(SysErrorMessage(GetLastError)), nil, MB_ICONERROR);
    Exit;
  end;
  SetThreadPriority(hThreadTime, THREAD_PRIORITY_LOWEST);

  hThreadDate := CreateThread(nil, 0, @ThreadDateProc, nil, 0, ThreadDateID);
  if hThreadDate = 0 then begin
    MessageBox(Handle, PChar(SysErrorMessage(GetLastError)), nil, MB_ICONERROR);
    Exit;
  end;
  SetThreadPriority(hThreadDate, THREAD_PRIORITY_LOWEST);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  dwExitCode: DWORD;
begin
  StopThreads := True;

  SetWindowText(hMainWnd, 'Threads finalization, waiting...');
  Sleep(1000);

  GetExitCodeThread(hThreadTime, dwExitCode);
  if dwExitCode <> 0 then
    TerminateThread(hThreadTime, DWORD(-1));
  CloseHandle(hThreadTime);

  GetExitCodeThread(hThreadDate, dwExitCode);
  if dwExitCode <> 0 then
    TerminateThread(hThreadDate, DWORD(-1));
  CloseHandle(hThreadDate);

  DeleteCriticalSection(CriticalSection);
end;


end.



Цитата(Romikgy @ 31.10.2005, 12:54)
ожидание какого либо события будет постоянно есть ресурс проца в потоке, в таймере будет только на момент срабатывания его.

В потоках будет тоже только на "момент срабатывания".
PM   Вверх
Romikgy
Дата 2.11.2005, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(RideX @ 1.11.2005, 19:11)
EnterCriticalSection

Естественно если это использовать то проблем нет, а я говорил о прямом доступе без критических секций, почему я и советовал почитать по потокам!!!!!!!!

Цитата(RideX @ 1.11.2005, 19:11)
В потоках будет тоже только на "момент срабатывания".

Еще раз повторюсь ВСЁ зависит от внутриностей потока

ЗЫ и давай завязывать, не продуктивный спор стал!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
ФЫГ
Дата 3.11.2005, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 29.7.2005
Где: украйна

Репутация: 1
Всего: 1



Код

while true do begin
Application.ProcessMessages;
...
end;

цикл будет выполняться параллельно с другими потоками и пока прога не вырубится.

Это сообщение отредактировал(а) ФЫГ - 3.11.2005, 09:35
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0903 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.