Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.036 c
6-1081170420
Raptoridze
2004-04-05 17:07
2004.05.30
md5 хеш или хз


3-1084030448
exe
2004-05-08 19:34
2004.05.30
Получение всех Aliasov


7-1083140461
Pul
2004-04-28 12:21
2004.05.30
Как программно установить в биосе время включения компьютера


14-1083952838
Blackman
2004-05-07 22:00
2004.05.30
Стишок на ночь


3-1084296752
Alexei Sviridov
2004-05-11 21:32
2004.05.30
SQL-запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский