📄 wait_8cpp-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>Crypto++: wait.cpp Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.2 --><div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Compound List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Compound Members</a> | <a class="qindex" href="globals.html">File Members</a></div><h1>wait.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// wait.cpp - written and placed in the public domain by Wei Dai</span>00002 00003 <span class="preprocessor">#include "pch.h"</span>00004 <span class="preprocessor">#include "wait.h"</span>00005 <span class="preprocessor">#include "misc.h"</span>00006 00007 <span class="preprocessor">#ifdef SOCKETS_AVAILABLE</span>00008 <span class="preprocessor"></span>00009 <span class="preprocessor">#ifdef USE_BERKELEY_STYLE_SOCKETS</span>00010 <span class="preprocessor"></span><span class="preprocessor">#include <errno.h></span>00011 <span class="preprocessor">#include <sys/types.h></span>00012 <span class="preprocessor">#include <sys/time.h></span>00013 <span class="preprocessor">#include <unistd.h></span>00014 <span class="preprocessor">#endif</span>00015 <span class="preprocessor"></span>00016 NAMESPACE_BEGIN(CryptoPP)00017 00018 WaitObjectContainer::WaitObjectContainer()00019 {00020 Clear();00021 }00022 00023 <span class="keywordtype">void</span> WaitObjectContainer::Clear()00024 {00025 <span class="preprocessor">#ifdef USE_WINDOWS_STYLE_SOCKETS</span>00026 <span class="preprocessor"></span> m_handles.clear();00027 <span class="preprocessor">#else</span>00028 <span class="preprocessor"></span> m_maxFd = 0;00029 FD_ZERO(&m_readfds);00030 FD_ZERO(&m_writefds);00031 <span class="preprocessor">#endif</span>00032 <span class="preprocessor"></span> m_noWait = <span class="keyword">false</span>;00033 }00034 00035 <span class="preprocessor">#ifdef USE_WINDOWS_STYLE_SOCKETS</span>00036 <span class="preprocessor"></span>00037 <span class="keywordtype">void</span> WaitObjectContainer::AddHandle(HANDLE handle)00038 {00039 m_handles.push_back(handle);00040 }00041 00042 <span class="keywordtype">bool</span> WaitObjectContainer::Wait(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> milliseconds)00043 {00044 <span class="keywordflow">if</span> (m_noWait || m_handles.empty())00045 <span class="keywordflow">return</span> <span class="keyword">true</span>;00046 00047 DWORD result = ::WaitForMultipleObjects(m_handles.size(), &m_handles[0], FALSE, milliseconds);00048 00049 <span class="keywordflow">if</span> (result >= WAIT_OBJECT_0 && result < WAIT_OBJECT_0 + m_handles.size())00050 <span class="keywordflow">return</span> <span class="keyword">true</span>;00051 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (result == WAIT_TIMEOUT)00052 <span class="keywordflow">return</span> <span class="keyword">false</span>;00053 <span class="keywordflow">else</span>00054 <span class="keywordflow">throw</span> Err(<span class="stringliteral">"WaitObjectContainer: WaitForMultipleObjects failed with error "</span> + IntToString(::GetLastError()));00055 }00056 00057 <span class="preprocessor">#else</span>00058 <span class="preprocessor"></span>00059 <span class="keywordtype">void</span> WaitObjectContainer::AddReadFd(<span class="keywordtype">int</span> fd)00060 {00061 FD_SET(fd, &m_readfds);00062 m_maxFd = STDMAX(m_maxFd, fd);00063 }00064 00065 <span class="keywordtype">void</span> WaitObjectContainer::AddWriteFd(<span class="keywordtype">int</span> fd)00066 {00067 FD_SET(fd, &m_writefds);00068 m_maxFd = STDMAX(m_maxFd, fd);00069 }00070 00071 <span class="keywordtype">bool</span> WaitObjectContainer::Wait(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> milliseconds)00072 {00073 <span class="keywordflow">if</span> (m_noWait || m_maxFd == 0)00074 <span class="keywordflow">return</span> <span class="keyword">true</span>;00075 00076 timeval tv, *timeout;00077 00078 <span class="keywordflow">if</span> (milliseconds == <a class="code" href="cryptlib_8h.html#a0">INFINITE_TIME</a>)00079 timeout = NULL;00080 <span class="keywordflow">else</span>00081 {00082 tv.tv_sec = milliseconds / 1000;00083 tv.tv_usec = (milliseconds % 1000) * 1000;00084 timeout = &tv;00085 }00086 00087 <span class="keywordtype">int</span> result = select(m_maxFd+1, &m_readfds, &m_writefds, NULL, timeout);00088 00089 <span class="keywordflow">if</span> (result > 0)00090 <span class="keywordflow">return</span> <span class="keyword">true</span>;00091 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (result == 0)00092 <span class="keywordflow">return</span> <span class="keyword">false</span>;00093 <span class="keywordflow">else</span>00094 <span class="keywordflow">throw</span> Err(<span class="stringliteral">"WaitObjectContainer: select failed with error "</span> + errno);00095 }00096 00097 <span class="preprocessor">#endif</span>00098 <span class="preprocessor"></span>00099 <span class="comment">// ********************************************************</span>00100 <a name="l00101"></a><a class="code" href="class_waitable.html#_zlib_decompressora19">00101</a> <span class="keywordtype">bool</span> <a class="code" href="class_waitable.html#_zlib_decompressora19">Waitable::Wait</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> milliseconds)00102 {00103 <a class="code" href="class_wait_object_container.html">WaitObjectContainer</a> container;00104 <a class="code" href="class_waitable.html#_waitablea1">GetWaitObjects</a>(container);00105 <span class="keywordflow">return</span> container.<a class="code" href="class_wait_object_container.html#_wait_object_containera3">Wait</a>(milliseconds);00106 }00107 00108 NAMESPACE_END00109 00110 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:28 2003 for Crypto++ by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -