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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2011, 20:52   #1
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию Работа с TThread

Решил работать с обычными потоками, ибо у них возможностей больше (можно настраивать приоритет и разные многие штуки )) ), но увы не разобрался в принципе их работы. Как создавать и какие у них есть свойства. Объясните пожалуйста как создать поток и задать ему определённый приоритет и соответственно правильно вызывать.

З.Ы. Мб у кого ещё example по потокам найдётся?
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 14.02.2011, 21:03   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

File->New->Thread Object
и что там разбираться?

Цитата:
Решил работать с обычными потоками
а можно поинтересоватся, что это за необычные потоки у вас?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.02.2011, 21:06   #3
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
File->New->File->New->Thread Object
и что там разбираться?

а можно поинтересоватся, что это за необычные потоки у вас?
Потоки на WinAPI, просто там сложнее всё задать.

По поводу Thread Object. Увидел и толком вообще ничего не понял.
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 14.02.2011, 21:55   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

http://forum.vingrad.ru/forum/topic-60076.html
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 14.02.2011, 21:56   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

действительно что сложного? то, ну допустим так:
создаём новый юнит подключаем модуль classes
далее это:
Код:
type
  TmyFirstThread = Class(TThread)
   private
   
protected 
  
public
procedure Execute;
end;

implementation


procedure TmyFirstThread.execute;
begin
//что дклает наш поток.
end;
в основном проекте, подключпем юнит с потоком.

далее создаём перемную:
Код:
procedure someproc;
var
Thr:TmyFirstThread;
begin
Thr:=TmyfirstThread.Create(True); //пускаем поток остановленным
Thr.FreeOnTerminate:=true; //Освободить переменнукю по окончанию работы execute потока
Thr.Priority:=tpNormal; //Нормальны приоритет
Thr.Resume; //запускаем поток
end;
писал прямо тут
Человек_Борща вне форума Ответить с цитированием
Старый 14.02.2011, 22:43   #6
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
действительно что сложного? то, ну допустим так:
создаём новый юнит подключаем модуль classes
далее это:
Код:
type
  TmyFirstThread = Class(TThread)
   private
   
protected 
  
public
procedure Execute;
end;

implementation


procedure TmyFirstThread.execute;
begin
//что дклает наш поток.
end;
в основном проекте, подключпем юнит с потоком.

далее создаём перемную:
Код:
procedure someproc;
var
Thr:TmyFirstThread;
begin
Thr:=TmyfirstThread.Create(True); //пускаем поток остановленным
Thr.FreeOnTerminate:=true; //Освободить переменнукю по окончанию работы execute потока
Thr.Priority:=tpNormal; //Нормальны приоритет
Thr.Resume; //запускаем поток
end;
писал прямо тут
Так, понятно, спасибо. Только как осуществить поток в виде процедуры, т.е. передать ей несколько переменных?
Да и ещё, почему когда я ставлю приоритет tpLower загрузка на цп идёт на 99%?
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 14.02.2011, 23:05   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

хм, передать параметры? Тоже можно....
модифицируем модуль потока:
Код:
type
  TmyFirstThread = Class(TThread)
   private
   
protected 
Fmystring:string;
fmyvar:integer;  
public
procedure Execute;
constructor Create(mySuspend:boolead; myparam:string; myparam1:integer);
end;

implementation

constructor TmyFirstThread.Create(mySuspend:boolead; myparam:string; myparam1:integer);
begin
//вызываем родной конструктор потока
inherited Create(mySuspend); 
//передаём параметры потоку далее юзаем их в потоке
Fmystring:=myparam;
fmyvar:=myparam1;
end;


procedure TmyFirstThread.execute;
begin
//что дклает наш поток.
end;
ну как-то так, опять же на коленке.
Человек_Борща вне форума Ответить с цитированием
Старый 14.02.2011, 23:24   #8
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
хм, передать параметры? Тоже можно....
модифицируем модуль потока:
Код:
type
  TmyFirstThread = Class(TThread)
   private
   
protected 
Fmystring:string;
fmyvar:integer;  
public
procedure Execute;
constructor Create(mySuspend:boolead; myparam:string; myparam1:integer);
end;

implementation

constructor TmyFirstThread.Create(mySuspend:boolead; myparam:string; myparam1:integer);
begin
//вызываем родной конструктор потока
inherited Create(mySuspend); 
//передаём параметры потоку далее юзаем их в потоке
Fmystring:=myparam;
fmyvar:=myparam1;
end;


procedure TmyFirstThread.execute;
begin
//что дклает наш поток.
end;
ну как-то так, опять же на коленке.
Пытаюсь запустить таким образом:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var Thread: TmyFirstThread;
begin
Thread:=TmyFirstThread.Create(True,'aaa',0);
Thread.Resume;
end;
Но выдаёт абстрактную ошибку, напишите пожалуйста, как нужно правильно запускать поток с параметрами.
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 14.02.2011, 23:41   #9
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> почему когда я ставлю приоритет tpLower загрузка на цп идёт на 99%

приоритет не имеет отношения к загрузке. Если поток добровольно не отдаёт кванты времени системе (через Sleep(), WaitFor... и подобные вызовы), система считает, что этот поток занимает максимально отведенное ему время (при любом приоритете).
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 14.02.2011, 23:45   #10
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> выдаёт абстрактную ошибку

У Борща коленка дрожала когда он на ней писал)
И он забыл (?) самую малость:

Код:
public
procedure Execute; override;
mss вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с TThread pesi Общие вопросы Delphi 2 09.08.2010 14:12
TThread Vladislav_I Общие вопросы Delphi 0 30.04.2010 19:47
TThread в Дельфи ImmortalAlexSan Помощь студентам 2 23.04.2010 16:24
TThread и GUI Freezer Общие вопросы Delphi 8 05.08.2009 11:50
использование TThread amandra Общие вопросы Delphi 6 03.05.2008 03:13