//停止线程
void CVoiceRecordDlg::OnStopService()
{
CVoiceManager mVoiceManager;
mVoiceManager.isExitThrd = 1;//子类中无法接收到这个值 if (线程句柄不为空)
{
//程序会在这里阻塞!!!!!!
DWORD dwWaitThClose = WaitForSingleObject(mVoiceManager.hThrd,INFINITE);
BOOL retCloseHandle = CloseHandle(mVoiceManager.hThrd);
}
}class CVoiceManager
{ public:
volatile int isExitThrd;
}CVoiceManager::CVoiceManager()
{ isExitThrd = 0;//初值为0
}
//=================================
//启动线程
void CVoiceManager::StartVoiceThrd()
{ hThrd = CreateThread(NULL, 0, ReceivingThrd, this, 0, &dwID);
}//线程功能函数
void CVoiceManager::ReceivingLoop(void)
{ //isExitThrd无法接收到为1的值
while(!isExitThrd)
{ } //处理任务 DWORD m;
GetExitCodeThread(线程句柄,&m); //结束线程
::ExitThread(m);
}
void CVoiceRecordDlg::OnStopService()
{
CVoiceManager mVoiceManager;
mVoiceManager.isExitThrd = 1;//子类中无法接收到这个值 if (线程句柄不为空)
{
//程序会在这里阻塞!!!!!!
DWORD dwWaitThClose = WaitForSingleObject(mVoiceManager.hThrd,INFINITE);
BOOL retCloseHandle = CloseHandle(mVoiceManager.hThrd);
}
}class CVoiceManager
{ public:
volatile int isExitThrd;
}CVoiceManager::CVoiceManager()
{ isExitThrd = 0;//初值为0
}
//=================================
//启动线程
void CVoiceManager::StartVoiceThrd()
{ hThrd = CreateThread(NULL, 0, ReceivingThrd, this, 0, &dwID);
}//线程功能函数
void CVoiceManager::ReceivingLoop(void)
{ //isExitThrd无法接收到为1的值
while(!isExitThrd)
{ } //处理任务 DWORD m;
GetExitCodeThread(线程句柄,&m); //结束线程
::ExitThread(m);
}
解决方案 »
- 2005年的最后一个问题,请高手们光顾下我的门面拉,谢了!
- 我是新手:怎样学习图像处理?请高手指点。
- 做那方面用VC比较多呀!!
- 500分急求miscrosoft odbc 3.0 sdk.
- 小女子请教高手VC的问题
- 学习当中遇到了困难,请教高手:)
- 关于ODBC数据库的问题。
- DDE问题,一套软件提供了DDE的sever name,topic name,怎样用mfc建立与它的数据通讯?
- 我不但要程序只能运行一个实例,还要它在当用户在资源管理器中打开它所注册的文档时,激活当前实例打开该文档,怎么办?
- 怎样用MFC做浮动菜单 ,能Dock(象WORD一样)(谢谢)
- WTL做的浏览器死锁问题
- VC6.0中 调用GetTime
void CVoiceManager::StartVoiceThrd()
{ hThrd = CreateThread(NULL, 0, ReceivingThrd, this, 0, &dwID);
}DWORD WINAPI CVoiceManager::ReceivingThrd(void * pParam)
{ ASSERT(pParam);
CVoiceManager * pController = (CVoiceManager*) pParam;
pController->ReceivingLoop();
return 0;
}//线程功能函数
void CVoiceManager::ReceivingLoop(void)
{ while(!isExitThrd)
{}
}
HANDLE hThread, // handle to thread
DWORD dwExitCode // exit code
);
mVoiceManager.isExitThrd = 1;//子类中无法接收到这个值
你生成一个新变量设置为1有什么用?原先那个变量呢?
mVoiceManager.isExitThrd = 1;//子类中无法接收到这个值//================================================
CVoiceManager mVoiceManager; // 这个是临时变量, mVoiceManager并未启动线程;
这个对象是在VoiceRecordDlg.h头文件中创建的
void CVoiceRecordDlg::OnStopService()
{
//VoiceRecordDlg头文件冲创建对象CVoiceManager mVoiceManager;
mVoiceManager.isExitThrd = 1;//子类中无法接收到这个值 if (线程句柄不为空)
{
//程序会在这里阻塞!!!!!!
DWORD dwWaitThClose = WaitForSingleObject(mVoiceManager.hThrd,INFINITE);
BOOL retCloseHandle = CloseHandle(mVoiceManager.hThrd);
}
}class CVoiceManager
{ public:
volatile int isExitThrd;
}CVoiceManager::CVoiceManager()
{ isExitThrd = 0;//初值为0
}
//=================================
//启动线程
void CVoiceManager::StartVoiceThrd()
{ hThrd = CreateThread(NULL, 0, ReceivingThrd, this, 0, &dwID);
}//线程功能函数
void CVoiceManager::ReceivingLoop(void)
{ //isExitThrd无法接收到为1的值
while(!isExitThrd)
{ } //处理任务 DWORD m;
GetExitCodeThread(线程句柄,&m); //结束线程
::ExitThread(m);
}
在线程外部被修改后,无法等到最新的值
class CVoiceManager
{
public:
static int bFlag;
}//函数外部给变量赋值
int CVoiceManager::bFlag = 1;