2

複数の独立したコード ブロック間で共有されているシリアル ポートへのアクセスを同期するために、キューを使用したいと考えています。すべてのブロックはコールバック関数を提供し、必要に応じてキューに入れられ、シリアル ポート上で正確に 1 つのアトミック操作を処理します。次に、タイマーが保留中のすべての操作を定期的に実行しますが、できれば干渉はありません。

私は C++/CLI プログラミングに比較的慣れていないので、System::Collections::Queueを作成し、いくつかの文字列をキューに入れることができました。しかし、私の人生では、コールバック関数 ( void Test() ) へのポインターで同じことを行う方法を理解することはできません。

私は集中的にグーグルで検索しましたが、最も単純な例でさえうまくいきませんでした. このデリゲート、Boost、Marshal、gcnew のすべてが、今私を少し混乱させています。

Microsoft Visual C++ 2010 Express を使用しています。あなたが助けてくれることを願っています!

ドイツからよろしく、

ポール

4

1 に答える 1

1

.NET/CLR の世界では、System.Delegate クラスは関数ポインターの類似物です。

いくつかの低レベルの処理を行っており、コールバックは高レベルの管理された環境で記述されているため、マーシャリングが必要になります。

マネージ関数ポインターをネイティブ コールバックとして使用するには、この MSDN 記事が必要です

http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.getdelegateforfunctionpointer(v=vs.80).aspx

System.Delegate インスタンスのキューがある場合は、適切な引数のリストを指定して D.DynamicInvoke() 呼び出しを行うだけです。

于 2012-05-14T16:17:13.933 に答える