📄 subject_65378.htm
字号:
<p>
序号:65378 发表者:badboy 发表日期:2003-12-17 13:04:07
<br>主题:在控制台下,如何可以随时控制程序暂停和执行?
<br>内容:下面的程序将会一直打印main thread is running!字符串。我想,在键盘上控制这个输出。就是,当敲击某个键上,执行结果输出就暂停了(即主线程暂停了),当再敲击这个键上,程序继续执行(即主线程恢复执行)。反复如此。<BR> 最好,是敲击那个键时,屏幕不显示被敲击的键的符号!<BR> 顺便问一下,控制台下,主线程的句柄怎么得到?<BR><BR>#include "iostream.h"<BR>void main()<BR>{<BR> bool TRUE=true;<BR> while(TRUE)<BR> {<BR> cout<<"main thread is running!"<<endl;<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>
回复者:zzjhsj 回复日期:2003-12-17 13:36:52
<br>内容:<BR>bool e=true;<BR>void thread1(void*thrd_id)<BR>{<BR> HANDLE th=OpenThread(THREAD_SUSPEND_RESUME,FALSE,(DWORD)thrd_id);<BR> SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL );<BR> for(;;)<BR> {<BR> if(getch()=='s')<BR> {<BR> if(e=!e)<BR> ResumeThread(th);<BR> else<BR> SuspendThread(th);<BR> }<BR> <BR> }<BR>}<BR><BR>void main()<BR>{<BR> _beginthread(thread1,1024,(void*)GetCurrentThreadId());<BR> while(true)<BR> {<BR> cout<<"main thread is running!"<<endl;<BR> }<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>
回复者:badboy 回复日期:2003-12-17 16:55:34
<br>内容:高手!您学的真好,真佩服!<BR><BR> HANDLE th=OpenThread(THREAD_SUSPEND_RESUME,FALSE,(DWORD)thrd_id);<BR><BR> 这个函数,我怎么找不到,编译不通过!<BR> <BR> 这个函数应该就是获得主线程的句柄的吧?<BR><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>
回复者:badboy 回复日期:2003-12-17 19:09:14
<br>内容: //我知道了,您可能误写了,那个函数应该应该是<BR>//HANDLE th=OpenProcess(THREAD_SUSPEND_RESUME,FALSE,(DWORD)thrd_id);<BR>//不过,高手,不行啊!看代码似乎满足要求,主线程执行起来还是控制不住。<BR><BR>#include "iostream.h"<BR>#include "process.h"<BR>#include "windows.h"<BR>#include "conio.h"<BR>bool e=true;<BR>void thread1(void*thrd_id)<BR>{<BR> HANDLE th=OpenProcess(THREAD_SUSPEND_RESUME,FALSE,(DWORD)thrd_id);<BR> // HANDLE th=GetCurrentProcess();<BR> SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL );<BR> for(;;)<BR> {<BR> if(getch()=='s')<BR> {<BR> if(e=!e)<BR> ResumeThread(th);<BR> else<BR> SuspendThread(th);<BR> }<BR> <BR> }<BR>}<BR>void main()<BR>{<BR> _beginthread(thread1,1024,(void*)GetCurrentThreadId());<BR> while(true)<BR> {<BR> cout<<"main thread is running!"<<endl;<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>
<font color=red>答案被接受</font><br>回复者:zzjhsj 回复日期:2003-12-18 10:20:32
<br>内容:openthread 需要 win2000 or winme<BR>看这个<BR>bool e=1;<BR>void thread1(void*thrd_id)<BR>{<BR> HANDLE th=thrd_id;<BR>// SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL);<BR> for(;;)<BR> {<BR> if(getch()=='s')<BR> {<BR> if(e=!e)<BR> ResumeThread(th);<BR> else<BR> SuspendThread(th);<BR> }<BR> }<BR>}<BR><BR>void main()<BR>{<BR> HANDLE hcur;<BR> DuplicateHandle(GetCurrentProcess(),GetCurrentThread(),GetCurrentProcess(),&hcur,NULL,FALSE,DUPLICATE_SAME_ACCESS);<BR> _beginthread(thread1,1024,hcur);<BR><BR> <BR> while(TRUE)<BR> {<BR> cout<<"main thread is running!"<<endl;<BR> }<BR>} <BR><BR>2003-12-18 10:26:23
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -