-1

スレッドでレコードを使用すると、たとえば次のようになります。

type

TClient = Class(TThread)
public
    mcmd:record
    cid:Byte;
    kd, recvresponse:Boolean;
end;

変数にアクセスしようとすると、ランダムな値が返されます。コンパイラの問題ですか?私は Windows 7 x64 で Delphi 6 を使用しています。アクセスするには次のようにします。

var
    c:TClient;
begin
    if listview1.itemfocused = nil then Exit;
    c := ListView1.ItemFocused.Data;
    if c = nil then Exit;
    ShowMessage(IntToStr(c.mcid.cid));
end;

itemfocused データ変数を割り当てる方法は次のとおりです。

Procedure TClient.New;
Begin
    Main.ListView1.Items.BeginUpdate;
    item := Main.ListView1.Items.Add;
    item.Caption := Split(dat1, '|', 0);
    item.SubItems.Add(ip);
    item.Data := @Self;
    Main.ListView1.Items.EndUpdate;
End;

私はそれを と呼んでいSynchronizeます。

4

1 に答える 1

1

Selfローカル変数です。格納したポインタは、戻るDataとすぐに無効になりNewます。へのポインターを格納する代わりに、Selfその値を格納する必要があります。

Item.Data := Self;

それがコンパイルされない場合は、型キャストします。

于 2013-10-08T02:28:32.010 に答える