如何在hello world程序中添加一个线程,让显示窗口的同时做另外一件事?
来源:百度知道 编辑:UC知道 时间:2024/09/28 15:43:17
为实现这个功能,又不影响窗口操作,可能就是添加线程吧,如何做啊?是不是用CreateThread()这个函数?如何用 请各位高手赐教!
YoungSoft :提示错误
“CreateThread” : 不能将参数 3 从“DWORD (LPVOID)”转换为“LPTHREAD_START_ROUTINE” 为何啊?
还有 像本题情况一般是在主函数离开线程还是在窗口处理函数中开线程
你是在用PlaySound吗?要是这样的话,只要将最后一个参数|上SND_ASYNC就OK了。
如:
PlaySound(fileName, NULL, SND_LOOP|SND_ASYNC);
如果不是,一定要加个线程的话,例子如下:
/////////////////////////////////////////////////
//例子开始
DWORD MusicThread(LPVOID pParam)
{
//在这里播放音乐。。。
.....
}
然后在你想要播放音乐的地方:
....
CreateThread(NULL, 0, MusicThread, NULL, 0, NULL);
//例子结束
//////////////////////////////////
看看是不是你想要的。
线程分工作者线程和界面线程(实际上是一样的,只不过界面线程有消息栈,不过通过合适的操作工作者线程也可以有消息栈)
创建线程有多种方式,即可以通过好几个函数调用来创建一个线程,(但在内核操作是一样的)。
MFC下可以使用AfxBeginThread 函数来创建一个线程,它有2个重载,一个是创建工作者,一个是界面。工作者线程主要传入一个标准的执行函数,界面线程传入一个CWinThread指针(一般类似于你创建工程的CxxxApp类)。具体操作看MSDN
当然,你也可以使用 CreateThread 来创建线程,不过这样只能创建工作者线程。实际上界面线程创建内部也是调用的这个函数,只不过界面线程的执行主函数体是一个循环,不断的读消息,取消息而已。这也就是唯一的工作者和界面线程的区别而已
事实上要想播放音乐而不耽误界面的操作,只要在播放音乐时选择后台播放即可(参数控制)。
如果不是要放音乐而是做其他事情,那就要创建线程了,使用AfxBeginThread或者CraeteThread都可以。