2011-08-09 15 views
8

मेरे अंदर एक थ्रेड और प्रोग्रेस रूटीन (एक फ़ंक्शन) है (मेरी थ्रेड क्लास में)।डेल्फी: CopyFileEx और थ्रेड

मैं धागा अंदर यह करने के लिए प्रयास करें:

CopyFileEx(pchar(ListToCopy.Strings[Loop]),pchar(TN+ExtractFileName(ListToCopy.Strings[Loop])), @ProgressRoutine, nil, nil, 0); 

लेकिन मैं कोई त्रुटि मिलती है: "चर आवश्यक" (त्रुटि इस में है: @ProgressRoutine)। यदि थ्रेड के बाहर फ़ंक्शन प्रोग्रेस रूटिन बनाना है तो सभी सामान्य होंगे।

उस फ़ंक्शन को थ्रेड के अंदर कैसे उपयोग करें?

धन्यवाद।

उत्तर

9

जब आप "थ्रेड के बाहर" और "थ्रेड के अंदर" कहते हैं, तो क्या आपका मतलब "स्टैंडअलोन फ़ंक्शन" और "थ्रेड ऑब्जेक्ट के सदस्य के रूप में" है? क्योंकि यदि कोई फ़ंक्शन किसी ऑब्जेक्ट का सदस्य होता है, तो उसका हस्ताक्षर अलग होता है, इसलिए यह संकलक से अपेक्षा नहीं करता है।

जिस तरह से आप इसे हल कर सकते हैं Self से CopyFileExlpData पैरामीटर के रूप में पास करना है। यह एक सूचक देता है कि यह कॉलबैक पर वापस आ जाएगा। अपने कॉलबैक को एक स्टैंडअलोन फ़ंक्शन के रूप में लिखें जो lpData पैरामीटर को थ्रेड ऑब्जेक्ट संदर्भ के रूप में व्याख्या करता है और उसी पैरामीटर के साथ आपके थ्रेड ऑब्जेक्ट पर विधि को कॉल करने के लिए उपयोग करता है।

संपादित करें: सरल उदाहरण। आइए मान लें कि कॉलबैक में केवल दो मानदंड हैं, जिन्हें "मान" और "lpData" कहा जाता है:

procedure ProgressRoutine(value: integer; lpData: pointer); stdcall; 
var 
    thread: TMyThreadClass; 
begin 
    thread := lpData; 
    thread.ProgressRoutine(value); 
end; 

procedure TMyThreadClass.ProgressRoutine(value: integer); 
begin 
    //do something with the value here 
end; 

procedure TMyThreadClass.Execute; 
begin 
    CopyFileEx(pchar(ListToCopy.Strings[Loop]),pchar(TN+ExtractFileName(ListToCopy.Strings[Loop])), @ProgressRoutine, Self, nil, 0); 
    //passing Self to lpData; it will get passed back to the callback 
end; 
+0

धन्यवाद !!! क्या आप कोड के 2 स्ट्रिंग्स लिख सकते हैं? दुर्भाग्यवश, मुझे बिल्कुल समझ में नहीं आया कि क्या करना है। – maxfax

+0

@ मैक्सफ़ैक्स: वहां, मैंने इसे एक सरल उदाहरण के साथ अपडेट किया। आप वहां से वास्तविक कॉलबैक extrapolate करने में सक्षम होना चाहिए। –

+0

बड़ा धन्यवाद !!!!!!! – maxfax

संबंधित मुद्दे