Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

передача параметров в поток   Найти похожие ветки 

 
FREEMAN82   (2004-04-20 14:34) [0]

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


 
Cobalt ©   (2004-04-20 14:37) [1]

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


 
Reindeer Moss Eater ©   (2004-04-20 14:46) [2]

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


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

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


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

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

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


 
Reindeer Moss Eater ©   (2004-04-20 14:59) [5]

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


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

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 15:19) [7]

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


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

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


 
Reindeer Moss Eater ©   (2004-04-20 15:31) [9]

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


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

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


 
Reindeer Moss Eater ©   (2004-04-20 15:50) [11]

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


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

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


 
Reindeer Moss Eater ©   (2004-04-20 16:03) [13]

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


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

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


 
Reindeer Moss Eater ©   (2004-04-20 16:10) [15]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.035 c
1-1085039941
Bocman
2004-05-20 11:59
2004.05.30
день и месяц из даты


1-1084878629
FireMan_Alexey
2004-05-18 15:10
2004.05.30
TForm


14-1084361214
kombat
2004-05-12 15:26
2004.05.30
Как правильно проектировать программу


9-1075019291
ZedeS
2004-01-25 11:28
2004.05.30
Игра Удав, движение


8-1080147255
Beginner1
2004-03-24 19:54
2004.05.30
Как увеличить TImage?