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

📄 subject_63903.htm

📁 vc
💻 HTM
字号:
<p>
序号:63903 发表者:badboy 发表日期:2003-12-07 13:05:21
<br>主题:如何控制一个指定的线程在指定的时间内工作?
<br>内容:/*在控制台程序下,如何能控制一个线程,让该线程执行一个固定时间后,就结束!比如,下面的主线程产生了一个线程hThrd,我想让主线程等那个hThrd线程执行固定的一段时间后,主线程就强行结束那个hThrd线程。如果在windows下,用计时器好象可以实现计时,但这是控制台下。怎么办,我在那个线程里做点手脚?<BR> */<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>#include &lt;stdio.h&gt;<BR>#include &lt;stdlib.h&gt;<BR>#include &lt;windows.h&gt;<BR>#include &lt;iostream.h&gt;<BR>HANDLE hevent;<BR>DWORD shijian;<BR>DWORD shijian1;<BR>DWORD WINAPI ThreadFunc(LPVOID);<BR>int main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE hThrd;<BR>&nbsp;&nbsp;&nbsp;&nbsp;DWORD threadId;<BR>&nbsp;&nbsp;&nbsp;&nbsp;hevent=CreateEvent(NULL,FALSE,FALSE,NULL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;hThrd = CreateThread(NULL,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThreadFunc,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(LPVOID)3,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;threadId );<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(WaitForSingleObject(hevent,INFINITE)==WAIT_TIMEOUT)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;&#34;we need to kill thread!&#34;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//kill 那个线程!<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hThrd);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return EXIT_SUCCESS;<BR>}<BR>DWORD WINAPI ThreadFunc(LPVOID n)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;shijian=GetTickCount();<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(;;)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((GetTickCount()-shijian)==50)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<BR>}<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:dsadsdas 回复日期:2003-12-07 16:39:01
<br>内容:你的WaitForSingleObject的第二个参数,不要用INFINITE,用一个特定的时间。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:badboy 回复日期:2003-12-07 16:49:38
<br>内容:上面的程序我改一下!<BR>#include &lt;stdio.h&gt;<BR>#include &lt;stdlib.h&gt;<BR>#include &lt;windows.h&gt;<BR>#include &lt;iostream.h&gt;<BR>HANDLE hevent;<BR>DWORD shijian;<BR>DWORD shijian1;<BR>DWORD WINAPI ThreadFunc(LPVOID);<BR>int main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE hThrd;<BR>&nbsp;&nbsp;&nbsp;&nbsp;DWORD threadId;<BR>&nbsp;&nbsp;&nbsp;&nbsp;hevent=CreateEvent(NULL,FALSE,FALSE,NULL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;hThrd = CreateThread(NULL,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThreadFunc,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(LPVOID)3,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;threadId );<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(WaitForSingleObject(hevent,INFINITE)==WAIT_OBJECT_0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;&#34;i am main thread ,sub thread is over!&#34;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hThrd);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return EXIT_SUCCESS;<BR>}<BR>DWORD WINAPI ThreadFunc(LPVOID n)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;shijian=GetTickCount();<BR>&nbsp;&nbsp;&nbsp;&nbsp;do<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;&#34;ok,this thread is running!&#34;&lt;&lt;endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}while((GetTickCount()-shijian)&lt;=2000);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;/*这里设置我们希望该线程执行多少时间!我先假定2秒. 我这里还是需要用到了循环,实际上,这个循环吃掉了我们的CPU很多时间。不过,没有办法,我想不出其他方法了!*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;SetEvent(hevent);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return (DWORD)n * 10;<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:微笑的撒旦 回复日期:2003-12-08 09:09:15
<br>内容:使用作业!代码就算了,自己看书吧。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:badboy 回复日期:2003-12-08 14:56:49
<br>内容:&nbsp;&nbsp;哎呀呀!&nbsp;&nbsp;你倒是说说清楚!&nbsp;&nbsp;我没有听过作业编程!<BR><BR>&nbsp;&nbsp;还是请麻烦一下,大概说说原理,我到哪去找这方面资料?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:微笑的撒旦 回复日期:2003-12-09 11:29:43
<br>内容:有本《windows核心编程》你可以参考。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -