这将是一个线程中的“睡眠”function的有效方法?

我想在我的线程类中实现一个sleep()函数,但我不知道这是否是一个有效/正确的方法来做到这一点。 这是我的整个线程类(thread.h):

#include <process.h> struct RUNNABLE{ virtual void run() = 0; }; class thread{ public: void start(void *ptr){ DWORD thr_id; HANDLE thr_handl = (HANDLE)_beginthreadex(NULL, 0, thread_proc, ptr, 0, (unsigned int*)&thr_id); } void sleep(int sleep_time, bool alertable){ SleepEx(sleep_time, alertable); } private: static unsigned int __stdcall thread_proc(void *param){ ((RUNNABLE*)param)->run(); _endthreadex(0); return 0; } }; 

正如你可能能够理清,这是我的sleep()函数:

 void sleep(int sleep_time, bool alertable){ SleepEx(sleep_time, alertable); } 

但是,这将使线程实例中包含的实际线程在指定的毫秒数内hibernate吗?

最好的问候,本杰明:)。

编辑:

所以按照atzz的说法,我可以将睡眠函数定义为一个静态成员函数,并且调用:: SleepEx(),这样我就可以这样调用它:

 class test : RUNNABLE{ virtual void run(){ printf("hi"); thread::sleep(1000, false); } }; 

然后这会导致线程执行“testing”runnable睡眠1000毫秒?

它会睡觉, 无论哪个线程调用这个成员函数

不,这会使原来的线程睡眠,而不是你开始的线程。

是的,只要它是从该线程调用的(即从thread::run() )中调用。 由于这个原因,我建议使sleep()成为一个受保护的成员函数。

或者,作为一种替代方法,使其成为一种静态方法,用thread::sleep()作为暂停调用线程的服务(在Java标准库中使用此方法thread::sleep()语义。

除了调用线程睡眠以外,不可能做任何事情,因为当前线程可能处于中间。

如果您需要暂停新创建的线程,则应该使用SuspendThread或将CREATE_SUSPENDED传递给_beginthreadex() ,但在某些情况下会导致死锁

请参阅http://msdn.microsoft.com/en-us/library/ms686345%28v=VS.85%29.aspx