0

現在、Vala を使用して、ネットワーク経由でデータを送信する必要があるアプリケーションを作成しています。パケットの作成 (および後日プロトコルの更新) を支援するために、void* としてメソッドに渡す構造を作成しました。これらの構造は、パケットがどのように配置されているかを表しており、あまりいじる必要なく、送信するパケットを非常に簡単に生成できます。ただし、これの問題は、GLib.OutputStream.write() の Vala ラッパーがカウントを受け入れないことです (元のメソッドは受け入れますが)。Vala は、渡された uint8[] のサイズを取得し、それを元のメソッドに提供します。GIO vapiを編集しないで、これを回避する簡単な方法はありますか? サイズを指定しながら void* を uint8[] にキャストする非常に安価な方法でしょうか? 私' アプリケーションは数千の接続を同時に維持する必要があるため、ここでは非常に高いパフォーマンスを目指しています。助けてくれてありがとう。

〜マイケル

4

2 に答える 2

1

次のようなマクロを使用しています。

#define OBJECT_TO_BUFFER(val,type,size) (*(size) = sizeof(type), (guint8*)val)

この問題を回避するには。オブジェクトを受け取り、単に同じメモリを として返しますuint8[]。Vala に対応するプロトタイプがあります。

unowned uint8[] Buffer.of<T>(ref T @value);

"tricks" と呼ばれるヘッダー ファイルと VAPI ファイルは、私の GitHub にあります。オブジェクトの配列を扱うための同様のバージョンがあります。

于 2012-03-26T15:25:41.937 に答える
1
unowned uint8[] buf = (uint8[]) your_real_buffer;
buf.length = the_length_you_want;

次に、buf を送信します。

于 2012-04-08T17:02:41.823 に答える