PDA

Просмотр полной версии : примеры работы с пайпами на делфи


supernewbie
03.06.2011, 23:39
если у кого есть примеры работы с пайпами на делфи, киньте их сюды

желательно чтобы была синхронизация между клиентом и сервером, ну т.е. пока сервак не считал данные, посылающий поток не резумился, ну короче вы понели)

destructor
03.06.2011, 23:42
http://www.google.ru/search?client=opera&rls=ru&q=%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B+%D1%8 0%D0%B0%D0%B1%D0%BE%D1%82%D1%8B+%D1%81+%D0%BF%D0%B 0%D0%B9%D0%BF%D0%B0%D0%BC%D0%B8+%D0%BD%D0%B0+%D0%B 4%D0%B5%D0%BB%D1%84%D0%B8&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest

третья или четвертая ссыль, помоему оно

Morfik
04.06.2011, 00:27
забил я на эту штуку - там рабочий пример передачи трафика из клинта ло2 в экзешник пайпами )

supernewbie
04.06.2011, 08:37
забил я на эту штуку - там рабочий пример передачи трафика из клинта ло2 в экзешник пайпами )
блин, там дллка не принимает данные вроде да, ну щас попробую также как в сервере, в цикле реад делать

supernewbie
04.06.2011, 09:15
пля, посмотрите хуле он виснет когда Send у клиента вызываю

добавлено через хз скока там чего

да что за гавно!(

supernewbie
04.06.2011, 15:35
работает тока асинхронка, ему ваще пох, флудит сендами на бедный сервак! че сделать чтобы эта шняга суспендилась пока серв не обработает)

Добавлено через 5 часов 45 минут
пля, обнаружил ещё какую-то загадучную хрень, главный поток не резумится если засуспендить его

Morfik
04.06.2011, 16:27
работает тока асинхронка, ему ваще пох, флудит сендами на бедный сервак! че сделать чтобы эта шняга суспендилась пока серв не обработает)

Добавлено через 5 часов 45 минут
пля, обнаружил ещё какую-то загадучную хрень, главный поток не резумится если засуспендить его

используй че нить для синхронизации, тот же мютекс или симофор

supernewbie
04.06.2011, 18:20
я ваще так подумал, проще будет при отправке суспендить поток, а резумить тока по ответу от сервера, но блин, поток не резумится, крт. секции не робят, мутекс не робит, ваще хрень какая-то)


procedure TPipeClient.Answer;
begin
ReleaseMutex(hMutex);
end;

procedure TPipeClient.Send(buf:string);
var
rc:boolean;
begin
//if not FConnected then exit;
rc:=WriteFile (hPipe, pointer(buf)^, Length(buf), bytesWritten, @OverLapWrt);
if not rc then
if GetLastError = ERROR_IO_PENDING then
WaitForSingleObject (hEventWrt, INFINITE)
else FConnected:=false;
hMutex:=CreateMutex(nil, true, 'SendMutex');
if GetLastError = ERROR_ALREADY_EXISTS then
WaitForSingleObject (hMutex, INFINITE);
end;

это это не робит, ему пох! он нече не ждет никакие мюьтексы!

Добавлено через 1 час 12 минут
пасаны, че я не так делаю)

Добавлено через 12 минут
ыы, семафор робит))

xkor
04.06.2011, 20:36
пасаны, че я не так делаю)живёшь)

supernewbie
04.06.2011, 21:52
о_о
как жезка

Добавлено через 39 минут
пля короче это какой-то херовый способ синхрона, если клиент и сервер одновременно пошлют мессаджи друг другу то оба будут ждать друг от друга ответов, и вот я хз..

Добавлено через 6 минут
короче хз, при быстром обмене месаджами происходит висяк(

destructor
04.06.2011, 22:50
поток не резумится, крт. секции не робят, мутекс не робиткрокодил не ловится, не растет кокос.

supernewbie
04.06.2011, 23:38
короче идет какой-то адовый асинхрон...

Добавлено через 12 минут
убрал свой семафор, перестало вроде... но блин, как же синхронизировать ввод и вывод в этих пайпах

Morfik
05.06.2011, 00:39
короче идет какой-то адовый асинхрон...

Добавлено через 12 минут
убрал свой семафор, перестало вроде... но блин, как же синхронизировать ввод и вывод в этих пайпах

по симофору на каждого?

supernewbie
05.06.2011, 00:43
у каждого клиента свой симофор, ну да

но все равно может как-то дико взять повиснуть

короче попалите уже, я задолбался в конец(

destructor
05.06.2011, 03:23
можно вопрос:
нафига ваще понадобились "обьекты синхронизации"?

supernewbie
05.06.2011, 14:21
ну вот я передаю пакет скажем да, и после того как я передал, бот должен там подумать все дела, и сказать, убивать этот пакет или нет, так то.
и пока он не сказал - никуда пакет не девать!

как ты ваще в эксте пакеты убиваешь?

alexteam
05.06.2011, 14:39
убивать все, а отправку нужных оставить на совести бота ?

supernewbie
05.06.2011, 14:48
не, не катит) а если надо выборочно убивать пакет, а если скрипт должен убивать пакет, не(

Добавлено через 4 минуты
ну придумайте че-нить(

NLObP
05.06.2011, 14:53
тест.rar

объект заражен Virus.Win32.Induc.a (http://www.interface.ru/home.asp?artId=21572)

supernewbie
05.06.2011, 15:03
фак мой мозг

Morfik
05.06.2011, 15:26
объект заражен Virus.Win32.Induc.a (http://www.interface.ru/home.asp?artId=21572)

хе, хренька которая заражает делфи )

supernewbie
05.06.2011, 15:59
блин короче семафор не подходит, у меня ведь там не разные потоки, по идее надо просто засуспендить поток после отправки, запомнить его и резумнуть его после прихода ответа от серва

Добавлено через 23 минуты
вот че я пишу

hTh:=GetCurrentThread;
SuspendThread(hTh);

а потом, при ответе от серва

ResumeThread(hTh);

и нече не резумится(

NLObP
05.06.2011, 16:01
supernewbie, у меня есть простенькая прога (лаба дла универа) на сях, работа с пайпами. Дать?

supernewbie
05.06.2011, 16:25
блин, если там есть то о чём я грю то давай, а то у всех пайпы не ждут ответа от серва

Добавлено через 18 минут
пля

hTh:cardinal;

procedure Test;
begin
hTh:=GetCurrentThread;
SuspendThread(GetCurrentThread);
MessageBox(0, 'Resumed', '', 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
c:Cardinal;
begin
CreateThread(nil, 0, @Test, nil, 0, c);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ResumeThread(hTh);
end;

почему жму на кнопку и нет месаджа?

NLObP
05.06.2011, 16:25
блин, если там есть то о чём я грю то давай, а то у всех пайпы не ждут ответа от серва

Клиент-серверное приложение работы с БД. Может поможет. laba2.rar (http://rapid.ufanet.ru/3236992)

Доки еще есть.

SeregaZ
05.06.2011, 17:39
так может и ерундит из-за этой хреньки, которая заражает дельфи?

supernewbie
05.06.2011, 18:11
усё, настроил кажись)

PS эта хренька безвредна, вроде