ここからは、select()
「複数のファイル記述子を監視し、1つ以上のファイル記述子が何らかのクラスのI / O操作(入力可能など)に対して「準備完了」になるまで待機する」ために使用されます。次に、ソケットプログラミングに関するBeejのガイドselect()
を調べました。これは、ソケットファイル記述子を監視するために使用されていました。
要するに、チュートリアルとマニュアルページはそれがファイル記述子select()
で動作すると言っていました。しかし、オブジェクトを監視するために使用するコードに出くわしました。コード:select()
class SomeObject
{
public:
static SomeObject *_pInstance;
//...some other methods...
}
SomeObject *SomeObject::_pInstance = new SomeObject();
SomeObject &refObj = *SomeObject::_pInstance;
fd_set fdAllSet, fdReadableSet;
int nReadyHandles = 0;
FD_SET( refObj, &fdAllsSet ); //<---this line
while (1)
{
fdReadableSet = fdAllSet;
nReadyHandles = select( maxFd+1, &fdReadableSet, NULL, NULL, &someWaitTime );
while (nReadyHandles > 0)
{
if (FD_ISSET(refObj, &fdReadableSet))
{//do something
FD_CLR(refObj, &fdReadableSet);
}
}
}
だから問題は、select()
私の「オブジェクトの準備ができている」かどうかをどのように判断するのかということです。そしてFD_SET()
、最初の引数がではint
なくであると想定しているのに、なぜコンパイルエラーが発生しないのrefObj
ですか?