![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TSocketServer без формы [D7, Win2k]
Obsidee © (2007-10-02 13:35:00)Когда создаю TSocketServer на форме, кидая компонент, создаю событие OnRead, всё проходит легко и просто.
Но когда создаю в RTTI, то никакие события не вызываются?
что я делаю не так?
простой пример:
unit SS;
interface
uses
Classes, ScktComp, SysUtils;
type TServerThread = class (TThread)
private
SSocket :TServerSocket;
procedure OnRead (Sender: TObject; Socket: TCustomWinSocket);
protected
procedure Execute; override;
public
Constructor Create;
end;
implementation
constructor TServerThread.Create;
begin
inherited Create (false);
SSocket:=TServerSocket.Create(nil);
SSocket.Port:=80;
SSocket.OnClientRead := OnRead;
SSocket.Active:=true;
end;
procedure TServerThread.Execute;
begin
inherited;
self.Priority:=tpLower;
while not self.Terminated do sleep(1);
end;
procedure TServerThread.OnRead(Sender: TObject; Socket: TCustomWinSocket);
var
s: string;
begin
s:= socket.ReceiveText;
Writeln(s);
end;
Obsidee (2007-10-02 16:22:00) [21]Невидимое окно, которому слушающее гнездо адресует сообщения о своих событиях, создается неявно при вызове ServerSocket.Open
если оно создаётся, то почему я нечего не получаю?
сделать в Execute ни к чему не приводит
constructor TServerThread.Create;
begin
inherited Create (false);
SSocket:=TServerSocket.Create(nil);
end;
procedure TServerThread.Execute;
begin
inherited;
SSocket.Port:=80;
SSocket.OnClientRead := OnRead;
SSocket.Active:=true;
while not self.Terminated do sleep(1);
end;
Сергей М. (2007-10-02 16:06:00) [22]
> instance приложение получает в WinMain в качестве параметра
Пардон, WinMain-то его, конечно, получает, но это не имеет никакого отношения к твоей "проблеме".
Сергей М. (2007-10-02 16:00:00) [23]
> GetMessage (msg, 0,0,0); и GetMessage (msg, Handle,0,0);
>
> ничего не получают
В приведененом тобой коде нет никаких GetMessage.
> чтобы создать hWnd нужен instance
Это не твоя забота.
Невидимое окно, которому слушающее гнездо адресует сообщения о своих событиях, создается неявно при вызове ServerSocket.Open
> instance приложение получает в WinMain в качестве параметра
Ничего подобного)
> в консольном его нет
Кого ?!
Obsidee (2007-10-02 15:56:00) [24]да, есть HInstance
получаю с помощью него сообщения
но что с ними делать?
FearG0 (2007-10-02 15:54:00) [25]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1191102532&n=4
Загляни в эту ветку, там обсуждаем реализацию TClientSocket, но по сути все точь в точь и синтаксис один и тот же практически.
Obsidee (2007-10-02 15:51:00) [26]"Ты их у системы не спрашиваешь, вот "оно" их и не принимает."
а оно мне их и не даёт
GetMessage (msg, 0,0,0);иGetMessage (msg, Handle,0,0);
ничего не получают
насколько я знаю, чтобы создать hWnd нужен instance
instance приложение получает в WinMain в качестве параметра
в консольном его нет
Сергей М. (2007-10-02 15:23:00) [27]
> не думал что это будет иметь значение
Как оказалось - имеет)
> своего Instance не имеет
Любоеприложение имеет свой Instance.
А что он тебя так волнует ? К твоей проблеме это не имеет никакого отношения ...
> windows message не принимает
Ты их у системы не спрашиваешь, вот "оно" их и не принимает.
Obsidee (2007-10-02 15:15:00) [28]приложение консольное... не думал что это будет иметь значение
своего Instance не имеет, windows message не принимает...
спасибо
буду выкручиваться
Сергей М. (2007-10-02 14:12:00) [29]
> как же создать сервер в отдельном потоке правильно?
>
Создавать его можно где угодно.
Но активироватьего следует в контексте именно того потока. который будет ответственен за диспетчеризацию/выборку/обработку оконных сообщений, возбуждаемых твоими серверными гнездами.
"На огурцах" - активируй/деактивируй свой сервер непосредственно в теле TServerThread.Execute
Obsidee (2007-10-02 14:04:00) [30]наверное приплёл rtti изза real-time...
как же создать сервер в отдельном потоке правильно?
Сергей М. (2007-10-02 13:49:00) [31]
> когда создаю в RTTI
Чавой-то ?
Ты вообще в курсе, что это такое - RTTI ?
> никакие события не вызываются
И не будут "вызываться", поскольку объект класса TServerSocket создается тобой в вызывающемпотоке.
> что я делаю не так?
Абсолютно все.