【C++编程】C++实现多线程编程

在C++的多线程编程实现里有两种方式,,一种是Windows头文件里的CreateProcess,另一种是process.h里的_beginthread,我这里用的是后一种,并且将多线程操作封装成了类似Java里的Thread类。

Thread类包含四种操作(对应线程的几种状态):就绪(start),挂起(suspend)、恢复(resume)以及终止(terminate),另外,还包含了一个可以设置线程超时的操作。

Thread类代码如下(Thread.h):

typedef void *HANDLE;class Thread{public:Thread();//构造器voidstart();//线程启动函数virtual resume();setTimeOut(DWORD time); : init(void *_h);//运行当前线程};#endif

实现文件(Thread.cpp):

#include <iostream>using std::cin;using std::cout;using std::endl;(){m_timeout = INFINITE;//设置默认的超时,为无穷大}(){m_h = (HANDLE)_beginthread(init, 0, (void *)this);//创建线程}(){//线程运行方法}(void* _h){)_h;t->run();DWORD dw = WaitForSingleObject(t->m_h, t->m_timeout); //等待线程,500ms后超时结束,INFINITE表示不超时switch (dw){case WAIT_OBJECT_0:break;endl;break;case WAIT_FAILED:break;}}//线程挂起,返回之前挂起次数int Thread::suspend(){return SuspendThread(this->m_h);}//线程恢复,返回之前的挂起次数int Thread::resume(){DWORD re = ResumeThread(this->m_h);return re;}(){TerminateThread(this->m_h, EXIT_SUCCESS);}(DWORD time){this->m_timeout = time;}//返回超时时间DWORD Thread::getTimeOut(){return this->m_timeout;}

测试文件(TestThread.cpp):

::cin;using std::cout;using std::endl;::string;class TestThread : public Thread{public:TestThread(string _s){s = _s;}string s;void run();};void TestThread::run(){for (int i = 0; i < 10; i++){cout <<s+”\n”;}}int main(int argc, char *argv[]){TestThread *dt[10];dt[0] = new TestThread(“A”);//新建线程Adt[1] = new TestThread(“B”);//新建线程Bdt[0]->start();//开启线程Acout<<dt[0]->suspend()<<endl;//挂起线程Adt[1]->setTimeOut(500);dt[1]->start();//开启线程BSleep(2000);//暂停2s,此时线程A仍属于挂起状态,所以不执行dt[0]->resume();//恢复线程A,此时线程A属于恢复状态,继续执行getchar();}

测试结果如图:

都属于昨天。哪怕那山再青,那水再秀,

【C++编程】C++实现多线程编程

相关文章:

你感兴趣的文章:

标签云: