Главная страница
    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.297 c
1-1084961204
Ольга
2004-05-19 14:06
2004.05.30
Работа с Екселем


8-1079904338
Swine
2004-03-22 00:25
2004.05.30
О гифах


1-1085035121
Sandman25
2004-05-20 10:38
2004.05.30
procedure of class?


9-1074687325
SoulSilver
2004-01-21 15:15
2004.05.30
Help с Сетевой Игрой. Chat с помощью DXPlay


14-1084541764
Goida
2004-05-14 17:36
2004.05.30
Когда это прекратится?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский