1.本代码是一个创建,挂起,恢复和结束线程的demo,如果大家正在入门学习多线程,可以看一看.
2.书呆彭同学讲不要贴纯代码贴.但是这个初级的demo,代码既能解析其功能,因此就贴个代码的附件.
3.代码中有何种可以改进的地方或者愿意交流的同学,望不吝赐教.谢谢.

上传的附件 C2_ThreadDemo.rar

  • 标 题:答复
  • 作 者:书呆彭
  • 时 间:2008-11-27 16:51

我刚把代码看了一下。代码风格不错,很整齐。

提几点个人看出的问题:

1.全局变量的使用。虽然这是个demo程序,很小,但使用全局变量可能是你个人习惯。我个人的观点是,除了一些惯例,比如hInst之类的变量外,尽量不使用全局变量。如果有一些变量确实是最适于用全局变量,可以把它们放在一起,比如一个类或一个单独的名字空间中。

2.程序逻辑上有一定问题。点击多次“创建线程”,则之前创建的线程全部失去控制,只有最后创建的线程可以被控制。

  既然程序只是演示对一个线程的控制,那么在第一次创建线程成功后,就EnableWindow()将“创建”功能关掉。


另外,我不是反对贴纯代码,只要容易阅读,贴再多代码都可以。我只是觉得有人贴代码,结果贴出的代码很不好读,则不如不贴代码而说说自己的思路和技巧。如果代码很清晰,注释恰当,那我是非常乐意看的。

  • 标 题:答复
  • 作 者:书呆彭
  • 时 间:2008-11-27 17:04

对了,还有一点小小建议,结束线程最好是给线程发送消息,或其它通信方式,告诉线程,让其自行结束,TerminateThread()的方法在真正的多线程编程中是不应该使用的。

//global
namespace global{
HANDLE hThread;
volatile bool shouldExit;
};

执行线程函数中用这样的循环来实现:

while( !global::shouldExit )
{
}

主线程中控制代码这样写:

global::shouldExit = true;

::WaitForSingleObject( global::hThread, INFINITE );

// 线程已经结束

比TerminateThread()的方法要好一些。