RS232ポート用の小さなクラスを書いています。同期書き込みと非同期読み取りが可能です。したがって、非同期読み取りの場合、入力データを待機している2番目のスレッドを使用しています。データを受信したら、入力データを使用してユーザー コールバック (コンストラクターの引数として取得) を呼び出します。次のようになります。
typedef int (*ReceivedCallback)(string data);
class RS232
{
RS232(string portName, ReceivedCallback dataReceived);
~RS232();
private:
ReceivedCallback dataReceivedCallback;
private:
static unsigned ReaderThread(void* data);
public:
SendData(string data);
}
私の問題は次のとおりです。 ReaderThread へのポインターを _beginthreadex() 関数に渡すには、ReaderThread を静的にする必要があります。そして ReaderThread では、コンストラクターでユーザーから取得した「dataReceivedCallback」を呼び出したいと思います。しかし、静的な ReaderThread で非静的関数を呼び出すことができないため、できません。また、「dataReceivedCallback」を静的にすることはできません。これは、自分のクラス (COM1、COM2、COM3 用) のインスタンスが多数ある可能性があり、すべてのインスタンスに、ユーザーが取得した独自のコールバックが必要なためです。
私のアーキテクチャの間違いはどこですか? どのように実装しますか?
前もって感謝します!
PS Visual Studio 2005 を使用しています。