视频在线观看、下载地址:
http://www.rupeng.com/forum/thread-6680-1-1.html
板书
《C语言也能干大事》第二十节 多线程开发
1、多线程也是所有语言中都有的一个重要特性,一通百通的一个东西。
2、Sleep函数简介。为了简化问题,用Sleep函数模拟耗时操作,实际项目中用长时间数据库操作、读取大文件、网络操作等替换Sleep就可以。Sleep函数例子:msgbox 1,sleep 50000,msgbox 2。放一个额外button上去,更有效果。Sleep过程中界面是没有响应的,同理长时间的数据库操作、文件操作、网络操作等也会造成没有响应,原理简单分析:消息循环。
3、CreateThread函数:CreateThread( NULL, 0, ThreadFunc, 0, 0, 0 );一般注意第3个参数即可,回调,回调函数格式。Void指针(可以指向任何类型的数据)。
DWORD WINAPI ThreadFunc( LPVOID lpParam )
{
return 0;
}
改造msgbox的例子,暂时第一个参数传NULL。
在CreateThread之后加一句msg,更明白主线程不会等着子线程。
小例子:取消登录功能的使用。
总结,什么叫线程。普通的执行顺序是顺序执行一句执行完成执行另外一句,但是一旦某一句执行时间很长,后面的就要等;线程(Thread)就是主干执行流程中分出去的一条线,独立于主线程运行,在主线程中只是通过CreateThread把线程调度起来,然后就继续向后执行了,不等着线程执行完毕,让分出去的线程自己折腾去。
4、给线程传递参数。回忆:给子对话框传递参数。给子线程传递参数使用第四个参数,子线程函数中lpParam参数的值就是传递过来的参数。注意传递的是指针
(1)
CreateThread( NULL, 0, ThreadFunc, TEXT("如鹏网"), 0, 0 );
MessageBox(NULL,(TCHAR *)lpParam,TEXT(""),MB_OK);
(2):
CreateThread( NULL, 0, ThreadFunc, hwnd, 0, 0 );
SetDlgItemText(hwnd,IDC_OK,"hello");
讲故事:数据导入。课下作业:读取data.txt,将数据导入数据库,这个整合了线程、ODBC、IO操作的知识。听明白我讲的东西你只掌握了5%,只有把这个作业做出来才是真的懂了。实时显示数据处理进度,并且用户可以随时取消数据处理