⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wait_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 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&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Compound&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Compound&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;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 &lt;errno.h&gt;</span>00011 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>00012 <span class="preprocessor">#include &lt;sys/time.h&gt;</span>00013 <span class="preprocessor">#include &lt;unistd.h&gt;</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(&amp;m_readfds);00030         FD_ZERO(&amp;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(), &amp;m_handles[0], FALSE, milliseconds);00048 00049         <span class="keywordflow">if</span> (result &gt;= WAIT_OBJECT_0 &amp;&amp; result &lt; 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, &amp;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, &amp;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 = &amp;tv;00085         }00086 00087         <span class="keywordtype">int</span> result = select(m_maxFd+1, &amp;m_readfds, &amp;m_writefds, NULL, timeout);00088 00089         <span class="keywordflow">if</span> (result &gt; 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 + -