请教上各位大大如何把阻塞的线程队列变成非阻塞的

请问下各位大大怎么把阻塞的线程队列变成非阻塞的?
小弟写了段线程程序,是用来完成数据安装的,现在有1到12个线程会调用小弟下面的线程程序,现在小弟使用事件完成了线程队列处理数据的问题,但它会使小弟的界面程序阻塞掉,SetText无法更新界面文字,试了发消息来显示界面文字也不行。小弟请问下各位大大怎么把阻塞的线程队列变成非阻塞的?因为小弟的程序是客户端,有界面的,小弟是新手。

C/C++ code
void StarInstallApp(int pos)
{
    DWORD tempthreadid = 15;
    evFinish=CreateEvent(NULL,TRUE,false,NULL);    
g_StarInstallAppThread[15] =::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)StarInstallAppThreadProc, NULL, 0, &tempthreadid);
    ResumeThread(g_StarInstallAppThread[15]);
    WaitForSingleObject(evFinish,INFINITE);
    ::CloseHandle(g_StarInstallAppThread[15]);
}


DWORD static StarInstallAppThreadProc(LPVOID lpParameter)
{
    AllLabel[InstallPosQueue[InstallCount]]->SetText("正在安装");
    //数据处理,每次处理完的时间都不一样。
    processdata(InstallPosQueue[InstallCount]);
    AllLabel[InstallPosQueue[InstallCount]]->SetText("安装完毕");
    SetEvent(evFinish);

}


------解决方案--------------------
WaitForSingleObject(evFinish,INFINITE);

修改成有消息循环的等待函数
for()
{
WaitForSingleObject(evFinish, 0);
PeekMessage
TranslateMessage
DispatchMessage
}
------解决方案--------------------

WaitForSingleObject(evFinish,INFINITE);会导致阻塞。
可以选择MsgWaitForMultipleObjects
具体的可以看看
http://blog.****.net/bianbian17556231/article/details/5382230