线程问题,创建多个线程后,主线程(winapp)为什么没有响应了
vc建立了一个单文档视图结构工程,之后在CView类里面的菜单响应函数里面创建了几个线程(c代码创建的线程),为什么创建线程并启动之后,主程序窗体就没有反应了(窗体切换不了,不显示),只有等结束了创建的几个子线程之后才能切换回来并显示窗体和响应消息??请高手帮忙,多谢了!!!void CstView::OnEditTest() //我写的通过菜单响应的函数,在该函数下面创建了三个线程(其实是想使用atk开源包下面的三个语音识别模块ASource、ACode、ARec)
{
.....
ain=new ASource("AIn",&auChan);//函数里面使用 HCreateThread()创建线程
acode=new ACode("ACode",&auChan,&feChan);//函数里面使用 HCreateThread()创建线程
arec=new ARec("ARec",&feChan,&ansChan,rman,0);//函数里面使用 HCreateThread()创建线程
.....
ain->Start();
acode->Start();
arec->Start();
}
HThread HCreateThread(const char *name, int prBufLines, HPriority pr,
TASKTYPE (TASKMOD *task)(void *), void *arg){
static unsigned int threadIDCounter = 1;
HThreadT thread;
HThread t; int i;
........
HTLock();
t = (HThread)malloc(sizeof(HThreadRec));
t->name = CopyName(name);
t->status = THREAD_INITIAL;
if (mode>HT_NOMONITOR){
t->info = (HThreadInfo *)malloc(sizeof(HThreadInfo));
t->info->inLock = 0; t->info->inSignal = 0;
t->info->returnStatus = 0;
InitThreadPrBuf(&(t->info->prBuf),prBufLines);
}
t->next = threadList; threadList = t; ++numThreadRecords;
#ifdef WIN32
thread = (HANDLE)_beginthreadex(NULL,0,task,arg,0,&threadID);
t->thread = thread;
t->id = threadID;
if (thread==NULL)
HTError("HCreateThread: Cannot create thread",GetLastError());
switch(pr){
case HPRIO_HIGH:
winprio = THREAD_PRIORITY_HIGHEST;
break;
case HPRIO_LOW:
winprio = THREAD_PRIORITY_LOWEST;
break;
case HPRIO_NORM:
winprio = THREAD_PRIORITY_NORMAL;
break;
default:
HTError("HCreateThread: Bad priority",pr);
}
if (SetThreadPriority(thread,winprio)==0)
HTError("HCreateThread: cannot set priority",GetLastError());
#endif
}
现在的状态是,点击该菜单按钮后,运行出来ASource、ACode、ARec的三个窗体,三个窗体可以正常运行,但是我的单文档视图窗体就切换不过来了,也不响应AREC线程发送给它的消息了,请高手帮忙分析一下什么原因,如何解决?我要实现的是主窗体和三个线程的窗体并行运行,并且能够互发消息。