A
amdcwf
Unregistered / Unconfirmed
GUEST, unregistred user!
定义如下数据结构:
type Block=record
Num:integer;//块在块列表的序号
ScrRect:iScrRect;//对应的屏幕矩形
UserName:string;//计算此块的计算机名
UserIP:string;//计算此块的计算机IP
UserSocketID:integer;//计算此块的Socket连接句柄
DispatchedTime:string;//被分配出去的时间
CompletetTime:string;//计算完成的时间
end;
type CalPara=record//定义发送给Client端的计算参数的消息数据结构
cMin:ePoint;
sDCX:extended; //复数实部变化步长
sDCY:extended;//复数虚部变化步长
iMaxLoopNum:integer;//最大迭代次数
iBoarder:extended; //吸引子
end;
type AllCalInfo=record
BlockInfo:Block;
CurCalPara:CalPara;
end;
发送端:
function getAllCalInfo(var ACI:AllCalInfo):boolean;
begin
if BlockNum<>-1 then
begin
ACI.BlockInfo:=Blocks[BlockNum];
ACI.CurCalPara.cMin.X:=StrToFloat(FrmServer.LedtcXMin.Text);
ACI.CurCalPara.cMin.Y:=StrToFloat(FrmServer.LedtcYMin.Text);
ACI.CurCalPara.sDCX:=
(strToFloat(FrmServer.LedtcXMax.Text)-StrToFloat(FrmServer.LedtcXMin.Text))/FrmServer.SpWidth.Value;
ACI.CurCalPara.sDCY:=
(StrToFloat(FrmServer.LedtcYMax.Text)-StrToFloat(FrmServer.LedtcYMin.Text))/FrmServer.SpHeight.Value;
ACI.CurCalPara.iMaxLoopNum:=FrmServer.SpNum.Value;
ACI.CurCalPara.iBoarder:=FrmServer.SpXYZ.Value;
result:=true;
end else result:=false;
end;
var Info:^AllCalInfo;
begin
GetMem(Info,SizeOf(blocks[0]));
if getAllCalInfo(Info^) then
begin
SendNum:=Socket.SendBuf(Info,sizeOf(AllCalInfo));
end else showmessage('发生意外,不能取得计算信息!')
end;
Client端:
var
rechar;
CalInfo:^AllCalInfo;
sbuf:string;
relong:integer;
begin
// ShowMessage(inttostr(Sizeof(AllCalInfo)));
reLong:=Socket.ReceiveLength;
GetMem(CalInfo,reLong);
ZeroMemory(CalInfo,reLong);
Socket.ReceiveBuf(CalInfo,reLong);
if CalInfo^.BlockInfo.Num >-1 then//在这里查看CalInfo^的数据,发现与发送的不同
begin
Echo.Lines.Add('得到任务...');
end;
end;
end;
在线等待!!!
type Block=record
Num:integer;//块在块列表的序号
ScrRect:iScrRect;//对应的屏幕矩形
UserName:string;//计算此块的计算机名
UserIP:string;//计算此块的计算机IP
UserSocketID:integer;//计算此块的Socket连接句柄
DispatchedTime:string;//被分配出去的时间
CompletetTime:string;//计算完成的时间
end;
type CalPara=record//定义发送给Client端的计算参数的消息数据结构
cMin:ePoint;
sDCX:extended; //复数实部变化步长
sDCY:extended;//复数虚部变化步长
iMaxLoopNum:integer;//最大迭代次数
iBoarder:extended; //吸引子
end;
type AllCalInfo=record
BlockInfo:Block;
CurCalPara:CalPara;
end;
发送端:
function getAllCalInfo(var ACI:AllCalInfo):boolean;
begin
if BlockNum<>-1 then
begin
ACI.BlockInfo:=Blocks[BlockNum];
ACI.CurCalPara.cMin.X:=StrToFloat(FrmServer.LedtcXMin.Text);
ACI.CurCalPara.cMin.Y:=StrToFloat(FrmServer.LedtcYMin.Text);
ACI.CurCalPara.sDCX:=
(strToFloat(FrmServer.LedtcXMax.Text)-StrToFloat(FrmServer.LedtcXMin.Text))/FrmServer.SpWidth.Value;
ACI.CurCalPara.sDCY:=
(StrToFloat(FrmServer.LedtcYMax.Text)-StrToFloat(FrmServer.LedtcYMin.Text))/FrmServer.SpHeight.Value;
ACI.CurCalPara.iMaxLoopNum:=FrmServer.SpNum.Value;
ACI.CurCalPara.iBoarder:=FrmServer.SpXYZ.Value;
result:=true;
end else result:=false;
end;
var Info:^AllCalInfo;
begin
GetMem(Info,SizeOf(blocks[0]));
if getAllCalInfo(Info^) then
begin
SendNum:=Socket.SendBuf(Info,sizeOf(AllCalInfo));
end else showmessage('发生意外,不能取得计算信息!')
end;
Client端:
var
rechar;
CalInfo:^AllCalInfo;
sbuf:string;
relong:integer;
begin
// ShowMessage(inttostr(Sizeof(AllCalInfo)));
reLong:=Socket.ReceiveLength;
GetMem(CalInfo,reLong);
ZeroMemory(CalInfo,reLong);
Socket.ReceiveBuf(CalInfo,reLong);
if CalInfo^.BlockInfo.Num >-1 then//在这里查看CalInfo^的数据,发现与发送的不同
begin
Echo.Lines.Add('得到任务...');
end;
end;
end;
在线等待!!!