我有下一个代码:
int main()
{
OwnSelect(23, FD_READ | FD_WRITE); // <---- Several arguments as one
return 0;
}
int OwnSelect(SOCKET s, long lNetworkEvents)
{
// How can i check that FD_READ has been passed?
if(lNetworkEvents == FD_READ)
{
// never here
}
return 0;
}
无论另一个 FD 是否已通过 FD_READ,我如何检查 FD_READ 是否已通过。 谢谢!
最佳答案
似乎您在这里错过了一些基本的位操作。您对 FD_READ 和 FD_WRITE 进行或运算(| = 按位或),从而将两个值指示的位设置为参数。要检查 FD_READ 是否已通过,您需要将 AND lNetworkEvents 与 FD_READ 并检查结果是否等于 FD_READ,如下所示:
如果 (FD_READ == (lNetworkEvents & FD_READ)) { ... }
这当然假设 FD_READ 和 FD_WRITE 是旨在以这种方式使用的值(即通常没有重叠位)。
编辑:已修复,wabepper 绝对正确 :) 糟糕!
关于c++ - 在 C++ 中,如何在一个参数中测试与 "|"组合的多个标志之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11259846/