1.背景
比方注冊用户的时候须要发送邮件,可是发送邮件有一定的延时,所以注冊的时候是发邮件的同一时候,返回注冊成功给用户。而发邮件则由发邮件线程处理?怎样处理发邮件的线程呢?我眼下想到的有:1.每次须要执行时暂时创建线程;2.线程每次执行完成后自行Sleep一定的时间。等待结束后检查是否有须要执行的必要。否则进入Sleep。第一个方法因为每次都要起一个线程,然后又关掉线程。反重复复不好,并且还有其它隐患。另外一种呢,仅仅创建一次线程,可是因为有一个Sleep过程,所以发邮件有一定的延时。也不是太好。我眼下想到的方法是,邮件发送完成后线程自己陷入暂停状态。而须要发送邮件时,发送邮件的地方又启动线程。可是因为在当前线程不能自己SupendThread自己,所以须要採用取巧的方法。详细实现见下。
2.演示样例
#include <stdio.h> #include <process.h> #include <Windows.h> class CUser { public: HANDLE m_hThr; void Suppend() { SuspendThread(m_hThr); } }; unsigned _stdcall ThrTest(VOID* pPara) { CUser* p = (CUser*)pPara; int a = 0; while(1) { printf("Send email success -> %d ", ++a); // 自陷如暂停状态 p->Suppend(); } return 0; } int main() { CUser* p = new CUser(); // 创建发邮件线程,创建时挂起 p->m_hThr = (HANDLE)_beginthreadex(NULL, 0, ThrTest, p, CREATE_SUSPENDED, NULL); while(1) { // 须要启动线程 ResumeThread(p->m_hThr); Sleep(1500); } CloseHandle(p->m_hThr); delete p; p = NULL; return 0; }