本文介绍了关键部分会在这里工作还是我必须使用信号量或互斥量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是该程序的开始

 #include   "  Derived.h"
  int  main()
{
 for ( int  i =  0 ; i< ; =  2 ; i ++)
{
派生* pDerived =  Derived();
pDerived-> fun();
睡眠( 30000 );
}
返回  0 ;
} 




这是我的意思是基类的接口

 #include   ><   stdlib.h  > 
 #include   <   stdio.h  > 
 #include   <   string.h  > 
 #include   <   process.h  > 
 #include   <   atlstr.h  > 
 #include   <   Windows.h  > 
 #include   <   winsock2.h  > 
 #include   <   ws2tcpip.h  > 
 使用 命名空间 std;
 class 接口
{
公共:
结构 addrinfo addr_;
未签名  port_;
CString hostname_;

HANDLE threadHandle_;
HANDLE threadHandle1_;
布尔 connected_;
SOCKET袜子_;
SOCKET ThreadSocket;
虚拟 无效 fun()=  0 ;
虚拟 DWORD WINAPI MachineConnectThread(接口* my)=  0 ;
虚拟  int  SendRequest(SOCKET sock)=  0 ; // 这会将请求发送到计算机.
虚拟 字符 * ReceiveResponse(SOCKET袜子)=  0 ; // 这将接收来自计算机的二进制数据响应.
HANDLE threadHandle_;

}; 



这是我的派生类

 #include   "  CBase.h"
  class 派生: public 接口
{

公共:
衍生的();
无效 fun();
 int  SendRequest(SOCKET袜子);
字符 * ReceiveResponse(SOCKET sock);
DWORD WINAPI MachineConnectThread(接口* my);
静态 UINT ThreadFunc(LPVOID param);
CRITICAL_SECTION VarCS;
}; 





 #include   "  Derived.h"

派生的:: Derived()
{

sock_ = INVALID_SOCKET;
ThreadSocket = INVALID_SOCKET;

InitializeCriticalSection(&VarCS);

}
无效派生:: fun()
{
printf(" 有趣的功能\ n" );

// 此处将创建套接字,并将其传递给sebd请求并接收响应功能
尝试 {
DWORD dwThreadId;

threadHandle_ = CreateThread(NULL, 0 ,(LPTHREAD_START_ROUTINE)ThreadFunc, this  0 ,& dwThreadId);
} 捕获(...)
{
如果(threadHandle_ == NULL)
{

printf(" 创建线程时出错.\ n" );

返回  0 ;
}
}
}
 int 派生:: SendRequest(SOCKET袜子)
{
printf(" 在此函数中,请求将发送到服务器\ n" );

}
字符 *派生:: ReceiveResponse(SOCKET袜子)
{
printf(" 此处将从服务器接收响应\ n" );
}
UINT派生:: ThreadFunc(LPVOID参数)
{
接口* obj =(接口*)参数;

obj-> MachineConnectThread(obj); // 调用成员函数
// 在新线程中完成工作
返回  0 ;
}
DWORD WINAPI派生:: MachineConnectThread(接口* my)
{
ThreadSocket =(SOCKET)my-> sock_;
同时( 1 )
{
EnterCriticalSection(& VarCS); // 将在此处运行此关键部分
字符 * buf = NULL;
字符 * preBuf = NULL;
 int  i =  0 ;

SendRequest(ThreadSocket);
buf = ReceiveResponse(ThreadSocket);
睡眠( 20000 );
LeaveCriticalSection(&VarCS);
}











} 
解决方案






这篇关于关键部分会在这里工作还是我必须使用信号量或互斥量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-31 22:42