मुझे डेल्फी में बहु थ्रेड के साथ समस्याएं आ रही हैं। मेरे पास नामों की एक सूची है (2.000 नामों के बारे में कुछ), और मुझे अपनी साइट में प्रत्येक नाम का कुछ डेटा प्राप्त करने की आवश्यकता है। धागा नियंत्रण को छोड़कर, मेरा सिस्टम पूरी तरह से काम करता है।मल्टी थ्रेड डेल्फी
मैं 10 धागे बनाना चाहता हूं, और, जब कुछ धागा समाप्त हो जाता है, तो सूची के अंत तक एक और बनाएं ...
var
Form1: TForm;
tCount: Integer; //threads count
implementation
type
TCheck = class(TThread)
public
constructor Create(Name: string);
destructor Destroy; Override;
protected
procedure Execute; Override;
end;
MainT = class(TThread)
protected
procedure Execute; Override;
end;
destructor TCheck.Destroy;
begin
Dec(tCount);
end;
procedure MainT.Execute;
var
i: Integer;
Load: TStringList;
begin
Load:=TStringList.Create;
Load.LoadFromFile('C:\mynames.txt');
for i:= 0 to Load.Count -1 do
begin
if tCount = 10 then //if we have 10 threads running...
begin
repeat
Sleep(1);
until tCount < 10;
end;
TCheck.Create(Load.Strings[i]);
TCheck.Start;
Inc(tCount);
end;
end; // end of procedure
ठीक है, मैं TCheck.Constructor डाल नहीं किया क्योंकि समस्या विधि मैं कैसे बनाया धागे की संख्या की जांच कर रहा हूँ है। मेरा मतलब है, मेरा सॉफ़्टवेयर बस बिना किसी त्रुटि संदेश के रोकता है, कभी-कभी 500 नामों की जांच करता है, कभी-कभी 150 नाम ...
खराब अंग्रेजी के लिए खेद है।
क्या आप टीसीएचक सीटीआर पोस्ट कर सकते हैं? –
इसके अलावा, यदि आप 10 धागे चाहते हैं, तो 10 धागे बनाएं और उन्हें अपने सभी कामों को क्यूइंग सामग्री से संसाधित करें। उन्हें लगातार बना/समाप्त/नष्ट न करें। टीकाउंट और माइक्रो-मैनेजिंग थ्रेड्स को भूल जाओ। –
हाँ। आपको ऐसे निर्माता की आवश्यकता है जो थ्रेडसेफ कतार भरती है, और 10 उपभोक्ता इसे निकालें। –