1.本代码是一个创建,挂起,恢复和结束线程的demo,如果大家正在入门学习多线程,可以看一看.
2.书呆彭同学讲不要贴纯代码贴.但是这个初级的demo,代码既能解析其功能,因此就贴个代码的附件.
3.代码中有何种可以改进的地方或者愿意交流的同学,望不吝赐教.谢谢.
- 标 题:[代码]新手学习线程的一个demo]
- 作 者:benyanwk
- 时 间:2008-11-27 11:22
- 链 接:http://bbs.pediy.com/showthread.php?t=77556
1.本代码是一个创建,挂起,恢复和结束线程的demo,如果大家正在入门学习多线程,可以看一看.
2.书呆彭同学讲不要贴纯代码贴.但是这个初级的demo,代码既能解析其功能,因此就贴个代码的附件.
3.代码中有何种可以改进的地方或者愿意交流的同学,望不吝赐教.谢谢.
我刚把代码看了一下。代码风格不错,很整齐。
提几点个人看出的问题:
1.全局变量的使用。虽然这是个demo程序,很小,但使用全局变量可能是你个人习惯。我个人的观点是,除了一些惯例,比如hInst之类的变量外,尽量不使用全局变量。如果有一些变量确实是最适于用全局变量,可以把它们放在一起,比如一个类或一个单独的名字空间中。
2.程序逻辑上有一定问题。点击多次“创建线程”,则之前创建的线程全部失去控制,只有最后创建的线程可以被控制。
既然程序只是演示对一个线程的控制,那么在第一次创建线程成功后,就EnableWindow()将“创建”功能关掉。
另外,我不是反对贴纯代码,只要容易阅读,贴再多代码都可以。我只是觉得有人贴代码,结果贴出的代码很不好读,则不如不贴代码而说说自己的思路和技巧。如果代码很清晰,注释恰当,那我是非常乐意看的。
对了,还有一点小小建议,结束线程最好是给线程发送消息,或其它通信方式,告诉线程,让其自行结束,TerminateThread()的方法在真正的多线程编程中是不应该使用的。
//global
namespace global{
HANDLE hThread;
volatile bool shouldExit;
};
执行线程函数中用这样的循环来实现:
while( !global::shouldExit )
{
}
主线程中控制代码这样写:
global::shouldExit = true;
::WaitForSingleObject( global::hThread, INFINITE );
// 线程已经结束
比TerminateThread()的方法要好一些。