delphi4arab منتديات دلفي للعرب
سؤال حول عملية inherited مع الـ Thread - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : سؤال حول عملية inherited مع الـ Thread (/showthread.php?tid=3846)



سؤال حول عملية inherited مع الـ Thread - abdelmalek - 30-01-2012

السلام عليكم ورحمة الله وبركاته

ما الفرق بين هاته :
1-
PHP كود :
constructor TUploaderThread.Create(AServer: string; APort: integer; AConnectTimeout:Integer; ACommand : String; AFileName: string);
begin
inherited Create
(False);//---------------
    
FreeOnTerminate := True;
    
FServer:=AServer;
    
FPort:=APort;
    
FConnectTimeout:=AConnectTimeout;
    
FCommand:=ACommand;
    
FFileName:=AFileName;
    
FTransferRate:=0;
    
FTransferProgress:=0;
    
FTransferMax:=0;
end; 
مع اني اعرف ان Thread في هذه الحالة يبداء العمل طور إنشائه.
لكن السؤال : هل ينفد ما بداخل
PHP كود :
procedure TUploaderThread.execute;
begin
  
If (Not Terminated) Then
     Upload
;
end; 
قبل عملية إسناد القيم هذه :
PHP كود :
FreeOnTerminate := True;
    
FServer:=AServer;
    
FPort:=APort;
    
FConnectTimeout:=AConnectTimeout;
    
FCommand:=ACommand;
    
FFileName:=AFileName;
    
FTransferRate:=0;
    
FTransferProgress:=0;
    
FTransferMax:=0; 
2-
PHP كود :
constructor TUploaderThread.Create(AServer: string; APort: integer; AConnectTimeout:Integer; ACommand : String; AFileName: string);
begin
    FreeOnTerminate 
:= True;
    
FServer:=AServer;
    
FPort:=APort;
    
FConnectTimeout:=AConnectTimeout;
    
FCommand:=ACommand;
    
FFileName:=AFileName;
    
FTransferRate:=0;
    
FTransferProgress:=0;
    
FTransferMax:=0;
  
inherited Create(False);//---------------
end; 
3-
PHP كود :
constructor TUploaderThread.Create(AServer: string; APort: integer; AConnectTimeout:Integer; ACommand : String; AFileName: string);
begin
inherited Create
(True);//---------------
    
FreeOnTerminate := True;
    
FServer:=AServer;
    
FPort:=APort;
    
FConnectTimeout:=AConnectTimeout;
    
FCommand:=ACommand;
    
FFileName:=AFileName;
    
FTransferRate:=0;
    
FTransferProgress:=0;
    
FTransferMax:=0;
    
Resume;//---------------
end; 

نظرتي لهاته الطرق :
الطريقة الاولى : في نظري غير منطقية
الطريقة الثانية : غير منطقية أيضا
الطريقة الثالث : منطقية لكن الكومبيلر يظهر لي هذه الرسالة :

PHP كود :
[DCC Warning] USendFilesThread.pas(51): W1000 Symbol 'Resume' is deprecated 
مع العلم كلهم يعمل بصورة جيدة 1و2و3 . فقط ارغب ان اتفهم الامور ....
في أمان الله,,


سؤال حول عملية inherited مع الـ Thread - abdelmalek - 17-02-2012

وعليكم السلام ورحمة الله وبركاته
إقتباس :نظرتي لهاته الطرق :
الطريقة الاولى : في نظري غير منطقية
الطريقة الثانية : غير منطقية أيضا
الطريقة الثالث : منطقية لكن الكومبيلر يظهر لي هذه الرسالة :
اخي عبد المالك لو تمعنت في النظر قليلا لاوجدت الإجابة لبائس :
لحظ هاته الاجابة سوف تجد كل شيئ منطقي :
لا يتم الانتقال الى دالة اخرى قبل الانتهاء من الدالة الاولى .
اعني لا يتم تنفيذ :
PHP كود :
procedure TUploaderThread.execute;
begin
  
If (Not Terminated) Then
     Upload
;
end; 
قبل الخروج من الاجرائية :
PHP كود :
constructor TUploaderThread.Create(AServer: string; APort: integer; AConnectTimeout:Integer; ACommand : String; AFileName: string);
begin
inherited Create
(False);//---------------
    
FreeOnTerminate := True;
    
FServer:=AServer;
    
FPort:=APort;
    
FConnectTimeout:=AConnectTimeout;
    
FCommand:=ACommand;
    
FFileName:=AFileName;
    
FTransferRate:=0;
    
FTransferProgress:=0;
    
FTransferMax:=0;
end; 
وهذا يعني تنفيد كل العمليات قبل الخروج منها بضرورة .
اما بالنسبة لي هاته الرسالة :
PHP كود :
[DCC Warning] USendFilesThread.pas(51): W1000 Symbol 'Resume' is deprecated 
الكمبلر يقولك يوجد هناك عدم تفاهم او انت لم تعمل بالبدهيات وهو يقول غير هذا الكود :
PHP كود :
constructor TUploaderThread.Create(AServer: string; APort: integer; AConnectTimeout:Integer; ACommand : String; AFileName: string);
begin
inherited Create
(True);//---------------
    
FreeOnTerminate := True;
    
FServer:=AServer;
    
FPort:=APort;
    
FConnectTimeout:=AConnectTimeout;
    
FCommand:=ACommand;
    
FFileName:=AFileName;
    
FTransferRate:=0;
    
FTransferProgress:=0;
    
FTransferMax:=0;
    
Resume;//---------------
end; 
بهذا :
PHP كود :
constructor TUploaderThread.Create(AServer: string; APort: integer; AConnectTimeout:Integer; ACommand : String; AFileName: string);
begin
    FreeOnTerminate 
:= True;
    
FServer:=AServer;
    
FPort:=APort;
    
FConnectTimeout:=AConnectTimeout;
    
FCommand:=ACommand;
    
FFileName:=AFileName;
    
FTransferRate:=0;
    
FTransferProgress:=0;
    
FTransferMax:=0;
  
inherited Create(False);//---------------
end; 
بارك الله فيك وجزاك الله خيرا .
بالتوفيق ,,