Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

передача параметров в поток


FREEMAN82 ©   (2004-04-20 14:34:00) 

Здравствуйте! Подскажите пожалуйста.Есть функция которую я хочу вызывать в новом потоке с разными параметрами как это реализовать и как получить значение возвращаемое этой функцией.


freeman82   (2004-04-20 16:13:00) [1]

Спасибо за ответы!


Reindeer Moss Eater   (2004-04-20 16:10:00) [2]

Если есть в приложении форма, или просто окно, то в конце Execute потока посылай этому окну сообщение.
В обработчике сообщения запускай новый поток.


freeman82   (2004-04-20 16:07:00) [3]

Если скажем запустили 50 потоков и 20 уже отработали,как узнать, что они отработали и запустиь еще 20?


Reindeer Moss Eater   (2004-04-20 16:03:00) [4]

Не вызывай конструктор потока более чем 50 раз.


freeman82   (2004-04-20 15:58:00) [5]

а можно еще вопросик,как сделать чтобы одновременно было запущенно не более скажем 50 потоков.


Reindeer Moss Eater   (2004-04-20 15:50:00) [6]

Паблик свойству или паблик полю потока присвой его.


freeman82   (2004-04-20 15:48:00) [7]

нашел ошибку.
а как теперь получить значение функции из потока?


Reindeer Moss Eater   (2004-04-20 15:31:00) [8]

Какая ошибка?
Подскажи пожалуйста.


freeman82   (2004-04-20 15:26:00) [9]

В чем ошибка подскажи пожалуйста


Reindeer Moss Eater   (2004-04-20 15:19:00) [10]

А должен залетать?


freeman82   (2004-04-20 15:11:00) [11]

unit uThread;

interface

uses
 Classes,Windows;

type
 TShutdown = class(TThread)

 private
   { Private declarations }

 protected

  procedure Execute; override;
  function shutdown(name,message:string;delay:integer;restart,closeall:boolean):integer;

 end;
var
 message,name:string;
 delay:integer;
 restart,closeall:boolean;

implementation
uses umain;
function Tshutdown.shutdown(name,message:string;delay:integer;restart,closeall:boolean):integer;
var
tkp,tkpo:TTokenPrivileges;
zero:DWORD;
hToken:Thandle;
begin
 Zero:=0;
 if not OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)then
   begin
     messagebox(0,'Exit error','OpenProcessToken fail',MB_OK);
     exit;
   end;

 if not LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid) then
  begin
   messagebox(0,'Exit error','LookupPrivilegeValue fail',MB_OK);
   exit;
  end;
tkp.PrivilegeCount :=1;
tkp.Privileges[0].Attributes :=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(TtokenPrivileges),tkpo,Zero);
If Boolean(GetLastError()) then
 begin
  messagebox(0,'Exit error','AdjustTokenPrivileges fail',MB_OK);
  exit;
 end;
 initiateSystemShutdown (PChar(name),PChar(Message),delay,restart,closeall);
 result:=GetLastError();
end;

procedure TShutdown.Execute;
var
a:integer;
begin
a:=shutdown(name,message,delay,restart,closeall);
end;

end.

unit uMain;
...
proc1:Tshutdown;
.....
name:='comp1';
.....
proc1:=tshutdown.create(false);
здесь вылетаю.


Reindeer Moss Eater   (2004-04-20 14:59:00) [12]

А при таком подходе к псевдокоду иначе и быть не может


freeman82   (2004-04-20 14:54:00) [13]

procedure TSomeThread.Execute;
begin
case fMode of
Mode1: SomeMethod1(fSomeField1);
Mode2: SomeMethod2(fSomeField2,fSomeField3,fSomeField4);
...
ModeN: AnotherMethod;
end;
end;

при таком подходе вылетает ошибка: значение fSomeField1 'is not component name'


FREEMAN82   (2004-04-20 14:52:00) [14]

Спасибо Cobalt ©,попробую.


Reindeer Moss Eater   (2004-04-20 14:46:00) [15]

procedure TSomeThread.Execute;
begin
case fMode of
 Mode1: SomeMethod1(fSomeField1);
 Mode2: SomeMethod2(fSomeField2,fSomeField3,fSomeField4);
 ...
 ModeN: AnotherMethod;
end;
end;


Cobalt   (2004-04-20 14:37:00) [16]

У экземпляра потока есть свойства. Присваивайте ему необходимые значения - и всё будет пучком.
Ес-сно, надо в парамтры функции подставлять эти самые данные из свойств класса потока.


Наверх

Титульная страница Поиск, карта сайта Написать письмо