현재 멀티캐스트로 데이터를 받아서 처리하는것을 돌리는 중입니다.
그런데 지금 현재는 하나의 프로세서로 돌리고 있는데 물론 각 라인마다 각각의 다른데이터가 날라옵니다.
처리하는 부분은 같은데 함수로 만들어 놨는데 각각이 공유해서 쓰지는 않지만 처리하는거는 동일합니다.
지금 소스가
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms
;
const
WM_SOCK1 = WM_USER + 1;
UDPPORT1 = 18500;
MY_GROUP1 = '255.255.255.0';
WM_SOCK2 = WM_USER + 2;
UDPPORT2 = 18501;
MY_GROUP2 = '255.255.255.1';
type
ip_mreq = record
imr_multiaddr: in_addr; (* IP multicast address of group *)
imr_interface: in_addr; (* local IP address of interface *)
end;
TIpMReq = ip_mreq;
PIpMReq = ^ip_mreq;
type
TfrmMain = class(TForm)
Button1: TButton;
private
procedure ReadData1(var Message: TMessage); message WM_SOCK1;
procedure ReadData2(var Message: TMessage); message WM_SOCK2;
public
end;
== 이렇게 한다음 멀티캐스트 등록한다음
procedure TfrmMain.ReadData1(var Message: TMessage);
var
buffer: Array [1..4096] of char;
len: integer;
flen: integer;
Event: word;
value: string;
begin
flen:=sizeof(FSockAddrIn1);
Event := WSAGetSelectEvent(Message.LParam);
if Event = FD_READ then
begin
len := recvfrom(s1, buffer, sizeof(buffer), 0, FSockAddrIn1, flen);
value := copy(buffer, 1, len);
aaa(value);
end;
end;
== 위와같이 사용합니다.
위 프로그램처럼 할때 데이터를 받아서 처리하는 aaa를 쓰레드로 만들어야 하나요 아님 멀티캐스트 등록하는것을 쓰레드로 만들어야 하나요?
다들 쓰레드를 사용해서 해야 각각이 데이터를 받아서 처리 한다던데.
어느부분을 쓰레드로 만들어야 할지를 모르겠습니다.
조언 부탁합니다.
|