线程的挂起与恢复
缺点:
什么时候调用?
挂起后的资源会存在,会发生一些不可预知问题!
XThread.h
#pragma once
#ifdef XPLATFORM_EXPORTS
#define XPLATFORM_API __declspec(dllexport)
#else
#define XPLATFORM_API __declspec(dllimport)
#endif
class XPLATFORM_API XThread
{
public:
bool Start();
void Wait();
void Suspend();
void Resume();
virtual void Main() = 0;
XThread();
~XThread();
private:
unsigned int thread_handler = 0;
};
XThread.cpp
#include "stdafx.h"
#include "XThread.h"
#include <process.h>
#include <windows.h> //只是在cpp中引用
//万一外部有相同的函数名不产生冲突,只在本cpp中有效。
static void ThreadMain(void *para)
{
XThread *th = (XThread *)para;
th->Main();
_endthread();
}
XThread::XThread()
{
}
XThread::~XThread()
{
}
bool XThread::Start()
{
thread_handler = _beginthread(ThreadMain, 0, this);
//直接把this指针传过去,那么就可以访问成员函数了
if ((int)thread_handler <= 0)
{
return false;
}
return true;
}
void XThread::Wait()
{
if (thread_handler == 0) return;
WaitForSingleObject((HANDLE)thread_handler, INFINITE);
}
void XThread::Suspend()
{
if (thread_handler == 0) return;
SuspendThread(HANDLE(thread_handler));
}
void XThread::Resume()
{
if (thread_handler == 0) return;
ResumeThread(HANDLE(thread_handler));
}
main.cpp
#include <iostream>
#include "XThread.h"
#include "windows.h"
using namespace std;
class Sus :public XThread
{
public:
void Main()
{
for (;;)
{
cout << s ;
Sleep(500);
}
}
char* s;
};
int main()
{
Sus s1;
Sus s2;
s1.s = "S1\n";
s2.s = "S2\n";
s1.Start();
s2.Start();
Sleep(3000);
s1.Suspend();
Sleep(3000);
s1.Resume();
getchar();
return 0;
}