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

Вниз

опять потоки....   Найти похожие ветки 

 
Tommy   (2003-10-03 15:25) [0]

запускаю до 10 раз один и тот же поток...и по4ему-то время распределяется неодинаково на все эти потоки...4то делать?


 
Digitman   (2003-10-03 15:28) [1]

привести код конструктора объекта-потока и код поточной ф-ции Execute()


 
Erik   (2003-10-03 15:34) [2]

Сухари сушить. С чего ты взял, что Windows это система реального времени? И почему она должна равномерно распределять время на твои потоки? Пиши VXD и тогда будеш говорить. Или перейди на другию OS желательно сменив железо.


 
Verg   (2003-10-03 15:34) [3]


> время распределяется неодинаково на все эти потоки


Да какой степени неодинаково?
В разы? или на доли процента?


 
Tommy   (2003-10-03 15:39) [4]

если на одном произошло 200 обрашении то в другом только 40...


 
Digitman   (2003-10-03 15:46) [5]

что есть "обрашении" ?
ты код приведешь наконец-то или нет ?


 
Tommy   (2003-10-03 15:50) [6]

type
TDbServerThread = class(TServerClientThread)
private
ID: Integer;
strCommand: string;
strFeedback: string;

public
procedure ClientExecute; override;
procedure Log;
procedure LogFeedback;
procedure AddRecord;
end;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
InitializeCriticalSection(CS);
end;

{ TDbServerThread }

procedure TDbServerThread.Log;
begin
Form1.lbLog.Items.Add ("Request: " + strCommand);
end;

procedure TDbServerThread.LogFeedback;
begin
Form1.lbLog.Items.Add ("Response: " + strFeedback);
end;

procedure TDbServerThread.AddRecord;
begin
with form1 do
begin

ADOQuery1.Active:=true;
ADOQuery1.Append;
ADOQuery1.Edit;

ADOQuery1["ICardNum"]:= "0000";
ADOQuery1["ICarNum"]:= Copy(strCommand,51,length(strCommand)-50);
ADOQuery1["IStatus"]:= "1";
ADOQuery1["IGroup"]:= "00";
ADOQuery1["IMType"]:= "0";
ADOQuery1["IFirstTime"]:= Now;
ADOQuery1["ILastTime"]:= Now;
ADOQuery1["IPay"]:= "0";
ADOQuery1["IReceipt"]:= "0000000";
ADOQuery1["ITicketNo"]:= "00000";
ADOQuery1.Post;
ADOQuery1.Active:=false;


end;
end;

procedure TDbServerThread.ClientExecute;
var
Stream: TWinSocketStream;
Buffer, strIn: string;
nRead: Integer;
begin

ID :=0;
FreeOnterminate:=True;

CoInitialize(nil);

Stream := TWinSocketStream.Create(ClientSocket, 5000);
try
while not Terminated and ClientSocket.Connected do
begin
Buffer := "";
strIn := "";
SetLength(Buffer, 64);
repeat
nRead := Stream.Read(Buffer[1], 64);
if nRead = 0 then
begin
ClientSocket.Close;
Break;
end;
SetLength (Buffer, nRead);
StrIn := StrIn + Buffer;
until (Pos(#10#13"."#10#13, Buffer) > 0);

if strIn = "" then
Continue // keep going
else
begin
// handle the request, if anything arrived
StrCommand := Copy (strIn, 1, Pos (#10#13"."#10#13, strIn) -1);
EnterCriticalSection(CS);
AddRecord;
LeaveCriticalSection(CS);
Synchronize(Log);
// send results back
Inc(ID);

// get the value to return
strFeedback := inttostr(ID);
//Synchronize(LogFeedback);
Stream.Write(strFeedback[1], Length (strFeedback));
end;
end;
finally

Stream.Free;
CoUninitialize;
end;
end;

procedure TForm1.ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin

lbLog.Items.Add ("GetThread: " +
ClientSocket.RemoteHost + " (" + ClientSocket.RemoteAddress + ")" );
SocketThread := TDbServerThread.Create(False, ClientSocket);

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DeleteCriticalSection(CS);
end;

end.


 
Digitman   (2003-10-03 16:03) [7]

так ... и что ? что здесь подразумевается под "обращением" ?


 
Verg   (2003-10-03 16:07) [8]

По ходу текста

1-ое:


> StrIn := StrIn + Buffer;
> until (Pos(#10#13"."#10#13, {Buffer} StrIn) > 0);


 
Verg   (2003-10-03 16:16) [9]


> ADOQuery1["ICarNum"]:= Copy(strCommand,51,length(strCommand)-50);


Это я вообще не понял - это что за 50 и 51? "Magic numbers"?


 
Tommy   (2003-10-03 16:18) [10]

"обращение" :) - это запись в базу данных


 
Tommy   (2003-10-03 16:22) [11]

>>Verg
да это мое там...не играет решающего значеня...потому 4то клиент всегда шлет больше 70 символов


 
Digitman   (2003-10-03 16:26) [12]


> Tommy


так ведь интенсивность обращений к базе напрямую у тебя зависит от интенсивности запросов клиента)

один клиент - лентяй, он делает запрос, скажем, раз в секунду
а другой - шустрый как электровеник, умудряется косой десяток запросов сделать за ту же секунду

что же ты хочешь ? насколько активен клиент, на столько интенсивна и работа сервера для данного соединения


 
Verg   (2003-10-03 16:28) [13]

Да вообще тут:

> repeat
> nRead := Stream.Read(Buffer[1], 64);
> if nRead = 0 then
> begin
> ClientSocket.Close;
> Break;
> end;
> SetLength (Buffer, nRead);
// Ну и? сделали Buffer длиной nRead (<=64) и пошли к началу цикла, где Stream.Read(Buffer[1], 64);
//Так и до AV недалеко

> StrIn := StrIn + Buffer;
> until (Pos(#10#13"."#10#13, Buffer) > 0);


 
Verg   (2003-10-03 16:30) [14]


> Buffer := "";
> strIn := "";
> SetLength(Buffer, 64);
> repeat
> nRead := Stream.Read(Buffer[1], length(Buffer));
> if nRead = 0 then
> begin
> ClientSocket.Close;
> exit;
> end;
> StrIn := StrIn + copy(buffer, 1, nread);
> until (Pos(#10#13"."#10#13, StrIn) > 0);


 
Tommy   (2003-10-03 16:51) [15]

видимо так оно и есть...только пока нету больше двух компов вот потому и такая история...спасибо вам!!!


 
Владислав   (2003-10-03 16:57) [16]

Странный код...


 
Verg   (2003-10-03 17:00) [17]


> Владислав © (03.10.03 16:57) [16]
> Странный код...


Да какой уж есть...

Сказано же:


> только пока нету больше двух компов вот потому и такая история



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.10.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.053 c
14-51469
Knight
2003-09-27 22:21
2003.10.16
Безопастность в PHP...


1-51223
ligor
2003-10-03 17:54
2003.10.16
dll


1-51277
asteriks
2003-10-06 20:16
2003.10.16
SIM-карты


1-51238
LDE
2003-10-07 10:13
2003.10.16
Текстовые файлы


3-51082
Filat
2003-09-25 19:32
2003.10.16
FIBPlis под Delphi 7, не могу установить :(((





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