http://www.sunxin.org/forum/thread/210.html?page=1
作者:虎非龙
第15课多线程与网络编程
1.多线程介绍,略
2.一个简单的多线程程序
MSND中参数[in]和[out]的含义要注意
#include <windows.h>
#include <iostream.h>DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
);
int index=0;
int tickets=100;
HANDLE hMutex;互斥对象的句柄
void main()
{
HANDLE hThread1;
HANDLE hThread2;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);创建线程1
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);创建线程2
CloseHandle(hThread1);关闭线程的句柄,为什么要关闭?它将线程的使用计数减1
CloseHandle(hThread2);这样当线程结束时,线程内核对象被释放,否则只有当进程结束,才释放线程的内核对象
/*while(index++<1000)
cout<<"main thread is running"<<endl;*/
//hMutex=CreateMutex(NULL,TRUE,NULL);将第二个参数设为true后,互斥对象的计数加1
hMutex=CreateMutex(NULL,TRUE,"tickets");此段代码可以让系统只一份实例在运行!
if(hMutex)
{
if(ERROR_ALREADY_EXISTS==GetLastError())
{
cout<<"only instance can run!"<<endl;
return;
}
}
WaitForSingleObject(hMutex,INFINITE);此代码也将互斥对象的计数加1
ReleaseMutex(hMutex);所以要释放两次互斥对象
ReleaseMutex(hMutex);
Sleep(4000);睡眠4000毫秒
// Sleep(10);
}DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{
/*while(index++<1000)
cout<<"thread1 is running"<<endl;*/
/*while(TRUE)
{
//ReleaseMutex(hMutex);
WaitForSingleObject(hMutex,INFINITE);等待互斥对象的到来,到来后将互斥对象的计数加1
if(tickets>0)
{
Sleep(1);
cout<<"thread1 sell ticket : "<<tickets--<<endl;
}
else
break;
ReleaseMutex(hMutex);释放互斥对象,将其计数减1,这样可以保证,这两句话之间 的代码!的执行连续性!
}*/ WaitForSingleObject(hMutex,INFINITE);
cout<<"thread1 is running"<<endl;
return 0;
}DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
)
{
/*while(TRUE)
{
//ReleaseMutex(hMutex);
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
{
Sleep(1);
cout<<"thread2 sell ticket : "<<tickets--<<endl;
}
else
break;
ReleaseMutex(hMutex);
}*/
WaitForSingleObject(hMutex,INFINITE);
cout<<"thread2 is running"<<endl;
return 0;
}3.多线程聊天程序
1.加载套接字库在InitInstance()中,调用AfxSocketInit(),此时可以不加载库文件,但要加入Afxsock.h"头文件
2.在CChatDlg中创建成员变量m_socket,然后增加一个成员函数,IniSocket(),在其中完成m_socket的初始化和绑定。在OnInitDialog中调用InitSocket完成初始化工作。
3.定义一个结构体,包含两个参数,sock和hwnd,在OnInitDialog()中初始化这个结构体的对象。
4.创建一个线程,CreateThread(),须将线程函数RecvProc定义为静态的或者全局函数。
::PostMessage()完成将收到的数据发送给对话框。用自定义的消息,自定义的消息如何写?以前说过,参考下面的代码。注意要将EDitBox的MultiLine属性选上。
在ChatDlg.h中#define WM_RECVDATA WM_USER+1
afx_msg void OnRecvData(WPARAM wParam,LPARAM lParam);
在ChatDlg.cpp中
ON_MESSAGE(WM_RECVDATA,OnRecvData)
然后实现这个函数
void CChatDlg::OnRecvData(WPARAM wParam,LPARAM lParam)
{
CString str=(char*)lParam;
CString strTemp;
GetDlgItemText(IDC_EDIT_RECV,strTemp);
str+="\r\n";
str+=strTemp;
SetDlgItemText(IDC_EDIT_RECV,str);
}
最后在DWORD WINAPI CChatDlg::RecvProc(LPVOID lpParameter)
中调用 ::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempBuf);
//不能用SendMessage()
4.对发送按纽的响应代码:
void CChatDlg::OnBtnSend()
{
// TOD Add your control notification handler code here
DWORD dwIP;
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress(dwIP); SOCKADDR_IN addrTo;
addrTo.sin_family=AF_INET;
addrTo.sin_port=htons(6000);
addrTo.sin_addr.S_un.S_addr=htonl(dwIP); CString strSend;
GetDlgItemText(IDC_EDIT_SEND,strSend);
sendto(m_socket,strSend,strSend.GetLength()+1,0,
(SOCKADDR*)&addrTo,sizeof(SOCKADDR));
SetDlgItemText(IDC_EDIT_SEND,"");
}
分享到:
相关推荐
孙鑫VC视频教程笔记
资源名称:VC网络验证编写开发视频教程【20课】资源目录:【】编程视频教程网络验证编写20课第一课【】编程视频教程网络验证编写20课第七课【】编程视频教程网络验证编写20课第三课[51ZSK.COM]【】编程视频教程网络...
C++视频教程-VC深入详解自学笔记(完全免费
VC的视频教程,不懂用vc的人一定要看看,懂得的也看看,学到不一样的东西。
资源名称:VC 就业培训宝典之MFC视频教程资源目录:【】吕鑫:MFC视频教程第一章(1-1)【】吕鑫:MFC视频教程第一章(1-2)【】吕鑫:MFC视频教程第七章(7-1)【】吕鑫:MFC视频教程第七章(7-2)【】吕鑫:MFC...
VC6.0的学习笔记。 正在完美中。。。。。
适合VC6初学者,第一步观看视频,第二步运行配套源程序学习。课程目录如下: 01基于控制台的Win32程序;02 基于对话框的MFC工程;03 基于单文档的MFC工程;04 Windows基本控件编程;05工具栏和菜单的编程;06 Win32 ...
VC#笔记!(二)信息浏览页面设计步骤 1.建立ASP.NET应用程序项目。 2.向页面中加入Web服务器控件,这里使用了Label控件、DropDownList控件和Image控件。 3.设置页面和控件的属性。 4.编写后台代码将页面连接到...
孙鑫视频教程 vc视频教程 之 MFC AppWizard的原理与MFC程序框架的剖析.zip
VC串口通信modbus协议源代码工程视频教程工程建立详细步骤
vc入门教程,使你轻松进入vc的编程的世界,了解vc的基础知识和概念,对vc的进一步学习打下基础。
vc学习教程-界面设计,方便好用,又实惠
vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟
完整讲述了如何使用vc打造局域网聊天室,一共10课,每课都是一个视频教程(动画教程,时长半个小时到一个小时,画面清晰,解压后大小100多M),节目如下: 第一课、编程环境及准备知识 第二课、聊天室界面的...
VC 调试教程 解密版
VC HID开发笔记,希望对大家有帮助。
vc笔记,孙新视频作的一些笔记,简单的一些步骤,大概函数讲解
vc基础教程,适合于vc编程初学者的一门很经典的教材
VC2008教程,非常适合初学者入门,也可作为参考书用。
使用微软VFW进行视频开发的学习笔记,word格式,很全,应该对你有帮助。