完成端口接收udp 在release模式下报内存访问冲突 [问题点数:100分]

Bbs2
本版专家分:233
结帖率 92.11%
Bbs5
本版专家分:2255
Bbs12
本版专家分:361543
版主
Blank
名人 2013年 荣获名人称号
Blank
探花 2011年 总版技术专家分年内排行榜第三
2010年 总版技术专家分年内排行榜第三
Blank
进士 2012年 总版技术专家分年内排行榜第五
Blank
金牌 2012年1月 总版技术专家分月排行榜第一
Bbs2
本版专家分:233
Bbs2
本版专家分:233
Bbs5
本版专家分:2255
Bbs5
本版专家分:2255
Bbs5
本版专家分:2255
Bbs10
本版专家分:139143
Blank
进士 2018年总版新获得的技术专家分排名前十
Blank
银牌 2019年7月 总版技术专家分月排行榜第二
2019年5月 总版技术专家分月排行榜第二
Blank
铜牌 2019年8月 总版技术专家分月排行榜第三
2019年4月 总版技术专家分月排行榜第三
2019年3月 总版技术专家分月排行榜第三
Blank
红花 2019年8月 VC/MFC大版内专家分月排行榜第一
2019年7月 VC/MFC大版内专家分月排行榜第一
2019年6月 VC/MFC大版内专家分月排行榜第一
2019年5月 VC/MFC大版内专家分月排行榜第一
2019年4月 VC/MFC大版内专家分月排行榜第一
2019年3月 VC/MFC大版内专家分月排行榜第一
2019年1月 VC/MFC大版内专家分月排行榜第一
2018年12月 VC/MFC大版内专家分月排行榜第一
2018年11月 VC/MFC大版内专家分月排行榜第一
2018年10月 VC/MFC大版内专家分月排行榜第一
2018年9月 VC/MFC大版内专家分月排行榜第一
2018年8月 VC/MFC大版内专家分月排行榜第一
2018年5月 VC/MFC大版内专家分月排行榜第一
2018年4月 VC/MFC大版内专家分月排行榜第一
2018年3月 VC/MFC大版内专家分月排行榜第一
2018年2月 VC/MFC大版内专家分月排行榜第一
2018年1月 VC/MFC大版内专家分月排行榜第一
2017年12月 VC/MFC大版内专家分月排行榜第一
2017年11月 VC/MFC大版内专家分月排行榜第一
2017年7月 VC/MFC大版内专家分月排行榜第一
2012年7月 VC/MFC大版内专家分月排行榜第一
关于DEBUG与RELEASE的问题。为什么在DEBUG模式内存不涨,而在Release模式内存不释放?
如题,rn一个多线程的程序A,在辅助线程中调用DLL内的函数,当A在DEBUG<em>模式</em>下,A在线程结束时,可以释放<em>内存</em>。但在RELEASE<em>模式</em>下,在线程结束时却不能释放<em>内存</em>。由于辅助线程需要多次执行,结果导致在RELEASE<em>模式</em>下,<em>内存</em>不断的涨,直到系统崩溃。但在DEBUG<em>模式</em>下,就不会出现这样的问题。这是为什么?
VC++ UDP完成端口的实现
查阅多方资料,自己开发的UDP<em>完成端口</em>类封装,可以用做服务器,也可以用做客户端,性能稳定。欢迎下载测试,呵呵。由VC++ 2005实现。 事先声明:UDP<em>完成端口</em>类已经封装在了DLL中,未提供源代码。下载后的工程中演示了如何作为服务器和客户端使用。分值高些是因为我是新手,没有下载分了,不要骂我哦!下载包中有联络方式。
关于UDP 完成端口的问题
我做了一个UDP的服务器采用<em>完成端口</em>的方式,我在wsarecv后可以通过GetQueuedCompletionStatus得到一个完成事件,这时我对得到的数据进行处理,但是我想用通过接受的内容将数据wsasend到发送方,就会出现10057错误,主要是由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或<em>接收</em>数据的请求没有被接受。我想问的是如何通过<em>完成端口</em>方式可以得到发送的一些信息:比如发送方的在服务器的端口信息。rn
udp 完成端口接收数据
用<em>udp</em> <em>完成端口</em>,WSARecvFrom 如何指定<em>接收</em>buffer,因为此时不知道会<em>接收</em>哪个客户端的消息,所以没法指定为每个客户端的buffer,而<em>完成端口</em>本身为多线程<em>接收</em>,如何保证一个线程正在处理<em>接收</em>数据的bffer时,其它线程不会同时写入新的数据?
itor->second.c_str()内存访问冲突
mapValidData;rnrnmap::const_iterator itor =ValidData.begin();rnrnUINT len = ValidData.size();rnTCHAR buf[4];rnfor (UINT i=0;ifirst,buf,sizeof(buf)*sizeof(TCHAR),10);rnWritePrivateProfileString(WndClasName.c_str(),buf,itor->second.c_str(),iniFile.c_str());//这是就<em>内存</em><em>访问冲突</em>.rnrnrn请问大侠这个问题如何解决?
内存访问冲突,怎么搞的?
我分配<em>内存</em>时出现:GSDViewer.exe 中的 0x77fcc665 处未处理的异常: 0xC0000005: 写入位置 0x3ba8f4af 时发生<em>访问冲突</em> 。rn用vector::resize()函数也是。不知道怎么回事。rn
Opencv 内存访问冲突
如下图 调试时发现错误指向 imageROI = image(Range(350, 350 + logo.rows), Range(800, 800 + logo.cols)); 但是他并未出错。 后来偶然发现错误在199这里。 Mat image = imread("dota.jpg",199); 如果改为:Mat image = imread("dota.jpg",1);则
UDP完成端口出错的问题
.h文件rnclass CIocpSocket rnrnpublic:rn CIocpSocket();rn virtual ~CIocpSocket();rn BOOL CreateIocp();rn BOOL CreateSocket();rn void CreateWorkThread();rn static DWORD WINAPI ThdProc(void *param);rn void WsaRecv();rn void Run();rn void IocpStart();rnrnpublic:rn HANDLE m_iocp;rn SOCKET m_sock;rn CRITICAL_SECTION m_cs; /*限制重叠I/0*/rn int m_flag;rn;rnrnrnenum OP_TYPErnrn OP_READ,rn OP_WRITE,rn;rnrnstruct IO_DATArnrn OVERLAPPED m_overLap;rn rn OP_TYPE m_opType;rn WSABUF m_wsaData; rn char m_data[1024];rnrn SOCKET m_sock;rn sockaddr_in m_remote;rn int m_addrLen;rnrn IO_DATA()rn rn memset(m_data,0x00,sizeof(m_data));rn memset(&m_overLap,0x00,sizeof(OVERLAPPED));rnrn m_wsaData.buf= m_data;rn m_wsaData.len = sizeof(m_data);rn m_addrLen = sizeof(m_remote);rn rnrn;rn.ccp文件rnCIocpSocket::CIocpSocket()rnrn m_flag = 0;rn InitializeCriticalSection(&m_cs);rnrnrnCIocpSocket::~CIocpSocket()rnrn DeleteCriticalSection(&m_cs);rnrnrnBOOL CIocpSocket::CreateIocp()rnrn m_iocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,0,0);rn rn if(NULL == m_iocp)rn rn int err = GetLastError();rn return FALSE;rn rn return TRUE;rnrnrnrnDWORD WINAPI CIocpSocket::ThdProc(void *param)rnrn CIocpSocket *pDlg = (CIocpSocket *)param;rn pDlg->Run();rn return 0;rnrnrnvoid CIocpSocket::Run()rnrn BOOL ret = FALSE;rn DWORD bytes = 0;rn DWORD cmpKey = 0;rn LPOVERLAPPED pOver = NULL;rnrn while(1)rn rn ret = GetQueuedCompletionStatus(m_iocp,&bytes,&cmpKey,&pOver,2000);rn rn if(ret)rn rn if( NULL == pOver && 1000 == cmpKey ) /*收到1000退出*/rn rn break;rn rnrn IO_DATA *pData = (IO_DATA *)pOver;rnrn rn TRACE("sock = %d recv[%s] \n",pData->m_sock,pData->m_data);rnrn delete pData;rn rn /*关键代码临界区*/rnrn EnterCriticalSection(&m_cs);rn WsaRecv();rn LeaveCriticalSection(&m_cs);rn rnrn rn elsern rn int err = GetLastError();rn if(err == WAIT_TIMEOUT)rn rn TRACE("[ThdId = %d] TimeOut!!!\n",GetCurrentThreadId());rn rn rn rnrnrnrnvoid CIocpSocket::CreateWorkThread()rnrn SYSTEM_INFO sysInfo;rn GetSystemInfo(&sysInfo);rnrn DWORD thdNum = sysInfo.dwNumberOfProcessors;rnrn for(DWORD i = 0; im_sock = m_sock;rn pIoData->m_opType = OP_READ;rnrn /*重叠I/O*/rnrn int ret = WSARecvFrom(m_sock,&pIoData->m_wsaData,1,rn &byteRecv,&flag,(sockaddr *)&pIoData->m_remote,rn &pIoData->m_addrLen,(WSAOVERLAPPED *)pIoData,NULL);rnrn if(ret == SOCKET_ERROR)rn rn int err = GetLastError();rn if(err == WSA_IO_PENDING) /*投递异步成功*/rn rn TRACE("IO PENDING!!!\n");rn rnrn rnrnrnrnvoid CIocpSocket::IocpStart()rnrn BOOL res;rn res = CreateIocp();rn if(!res)rn TRACE("greateiocp error!\n");rn rn CreateWorkThread();rn rn res = CreateSocket();rn if(!res)rn TRACE("greatesocket error!\n");rnrn WsaRecv();rnrnrnrn用UDP写<em>完成端口</em>,可不知道为什么在rnif(ret == SOCKET_ERROR)rn rn int err = GetLastError();rn if(err == WSA_IO_PENDING) /*投递异步成功*/rn rn TRACE("IO PENDING!!!\n");rn rnrn rnerr 总是返回10045,大伙帮帮忙
UDP完成端口 疑难
rn本人使用<em>完成端口</em>有一段时间了rn rn但最近遇到一点麻烦rnrn以前都用tcp绑定<em>完成端口</em> 没遇到什么那解决的问题rnrn但前两个月因为要做一个<em>udp</em>的服务器 所以把<em>udp</em>绑定到了端口上rnrn刚开始没发现什么问题 后来工程做了一大半的时候 rnrn给服务器做压力测试发现rnrn服务器会奔溃 该开始以为是<em>内存</em>管理模块出了问题rnrn或者是 某个地方有<em>内存</em>溢出 甚至怀疑过编译器rnrn但经以反复测试 论证 实验 没发现任何可疑的地方rnrn昨天 我写了个简单 <em>udp</em> 基于<em>完成端口</em>的例子 发现 这个简单的例子 也会有同样的问题rnrn总有 某个寄存器会变成 0x00000010 在跟踪时发现 使某个寄存器变成 0x00000010rnrn的原因是因为 函数在退栈 pop eXX 所致 但是谁更给了 esp 寄存器里的数据我现在 rnrn没找到 但有一点 我的例子代码我实在是看不出有什么问题 rnrn望各位深如讨论这个问题 rnrn以下是 例子的全部 代码rnrn// test_<em>udp</em>.cpp : Defines the entry point for the application.rn//rnrn#include "stdafx.h"rn#include rn#include rn#pragma comment(lib,"ws2_32.lib")rnrnrn//////////////////////////////////////////////////////////////////////////rn//rn#define SOCK_LIB_VERSION MAKEWORD(2,2)rnrnHANDLE m_shCOP = NULL;rnrnclass OVERLAPPEDREF rnrnprivate:rn volatile LONG m_cRef;rnpublic:rn virtual LONG AddRef()rn rn return InterlockedIncrement(&m_cRef);rn rn virtual LONG Release()rn rn if(0==InterlockedDecrement(&m_cRef))rn rn delete this;rn return 0;rn rn return m_cRef;rn rn OVERLAPPEDREF()rn : m_cRef(1)rn rnrn rn virtual ~OVERLAPPEDREF()rn rnrn rn;rnstruct OVERLAPPEDEX : OVERLAPPEDREF , OVERLAPPEDrnrn inline OVERLAPPEDEX(LPBYTE p)rn : pData(p)rn rn ZeroMemory(static_cast(this),sizeof(OVERLAPPED));rn rn virtual ~OVERLAPPEDEX()rn rn delete pData;rn rn LPBYTE pData;rn;rnrnBOOL DoRecv(SOCKET hSocket)rnrn // 远程地址rn int remoteLen = sizeof(sockaddr) * 2;rn OVERLAPPEDEX* pOverlappedRecv = new OVERLAPPEDEX((LPBYTE)new char[1024+remoteLen]);rn sockaddr_in *remote_addr = (sockaddr_in*)pOverlappedRecv->pData;rn //赋值给 WSABUFrn WSABUF buf = 1024,(LPSTR)(pOverlappedRecv->pData + /*去掉地址*/remoteLen);rn DWORD dwFlags = 0;rn DWORD dwNumberOfBytesRecvd = 0;rn // 异步<em>接收</em>数据rn int nReturn = ::WSARecvFrom(rn hSocket,rn &buf,rn 1,rn &dwNumberOfBytesRecvd,rn &dwFlags,(sockaddr*)remote_addrrn ,&remoteLen,rn pOverlappedRecv,NULL);rn if(NO_ERROR == nReturn)rn rn return TRUE;rn rn int nError = ::GetLastError();rn // IO 中rn return nError == WSA_IO_PENDING;rnrnrnDWORD WINAPI OnCompletThreadProc(LPVOID /*lParam*/)rnrn while(TRUE)rn rn rn DWORD dwBytes = 0; rn ULONG uCompletionKey = NULL;rn LPOVERLAPPED pOverlapped = NULL;rn rn BOOL bResultError = ::GetQueuedCompletionStatus(m_shCOP,&dwBytes,&uCompletionKey,&pOverlapped,INFINITE);rn rn if( NULL == pOverlapped )rn rn if(bResultError)rn continue;rn break;rn rn if(!DoRecv(uCompletionKey))rn rn break;rn rn // 释放rn // 一旦压力过大会 程序在这里崩溃。函数或寄存器会莫名的变成0x10。 rn // 不知是何原因 是系统内部问题 还是我代码自身的问题?rn // 经测试发现 假如 把下句改为 delete static_cast(pOverlapped);即可避免异常发生rn // 但由于服务器的架构需要此模型,而且即使更改也不一定能稳定下来。rn // 折腾了好几个星期 也没查出原因 望有高人相助rn static_cast(pOverlapped)->Release();rn rn return 0;rnrnrnint APIENTRY WinMain(HINSTANCE hInstance,rn HINSTANCE hPrevInstance,rn LPSTR lpCmdLine,rn int nCmdShow)rnrn // TODO: Place code here.rn rn WSADATA nStartup;rn ::WSAStartup(SOCK_LIB_VERSION,&nStartup);rn sockaddr_in addr;rn ZeroMemory(&addr,sizeof(addr));rn addr.sin_family = AF_INET; rn addr.sin_addr.S_un.S_addr = INADDR_ANY;//::inet_addr("127.0.0.1");rn addr.sin_port = ::htons(19931);rn // 生成异步SOCKETrn SOCKET hSocket = ::WSASocket(rn AF_INET,rn SOCK_DGRAM,rn IPPROTO_UDP, rn NULL, rn 0,rn WSA_FLAG_OVERLAPPED);rn // 创建完成IO端口rn m_shCOP = ::CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,0,2);rn // 将套接字与IO端口绑定rn if(m_shCOP == ::CreateIoCompletionPort((HANDLE)hSocket,m_shCOP,(DWORD)hSocket,0))rn rn // 启用10个线程rn for(int i=0;i< 10 && bRecv;++y)rn rn if(!DoRecv(hSocket))rn bRecv = FALSE;rn rn if(bRecv)rn rn WaitForSingleObject(GetCurrentProcess(),INFINITE);rn rn rn rn CloseHandle(m_shCOP);rn closesocket(hSocket);rn return 0;rnrnrn简单的 压力测试 程序rnrn// test_sendto.cpp : Defines the entry point for the application.rn//rnrn#include "stdafx.h"rnrn#include rn#include rn#pragma comment(lib,"ws2_32.lib")rn#define SOCK_LIB_VERSION MAKEWORD(2,2)rnint APIENTRY WinMain(HINSTANCE hInstance,rn HINSTANCE hPrevInstance,rn LPSTR lpCmdLine,rn int nCmdShow)rnrn WSADATA nStartup;rn ::WSAStartup(SOCK_LIB_VERSION,&nStartup);rn sockaddr_in addr;rn ZeroMemory(&addr,sizeof(addr));rn addr.sin_family = AF_INET; rn addr.sin_addr.S_un.S_addr = ::inet_addr("192.168.1.222");rn addr.sin_port = ::htons(19931);rn SOCKET hSocket = ::WSASocket(rn AF_INET,rn SOCK_DGRAM,rn IPPROTO_UDP, rn NULL, rn 0,rn 0);rn while(sendto(hSocket,(LPCSTR)&addr,1024,0,(sockaddr*)&addr,sizeof(addr))!=-1);rn return 0;rnrnrnrnrn
请问UDP的完成端口
请问一下关于用UDP做<em>完成端口</em>,具体该怎么做?我只知道TCP的<em>完成端口</em>。
完成端口 UDP的问题
<em>完成端口</em>完成UDP的问题,我只是刚接触这一块。之前根据TCP的那个<em>完成端口</em>写了一个UDP的,相关的地址应该是对的,只是断点时,对数据进行<em>接收</em>的时候出现了问题。由于HEAPALLOC操作,<em>内存</em>一直增大,但是没有进入到<em>完成端口</em>绑定后的进程。TCP在绑定端口前需要ACCEPT,但是UDP不需要啊,这一块有写错的吗?或者谁有<em>完成端口</em>比较简单的例子呢,可以发一个吗?rn[code=c]//将端口与目前的<em>完成端口</em>绑定在一起。rn CreateIoCompletionPort((HANDLE)IOCPSocket, CompletionPort, (DWORD)sClient, 0);rn rn // Launch an asynchronous operation for new arrived connectionrn lpPerIOData = (LPPER_IO_OPERATION_DATA)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(PER_IO_OPERATION_DATA));rn lpPerIOData->Buffer.len = MAX_PACKBUFFER_SIZE;rn lpPerIOData->Buffer.buf = lpPerIOData->szMessage;rn lpPerIOData->OperationType = RECV_POSTED;rn int x=WSARecvFrom(IOCPSocket,&lpPerIOData->Buffer,1,&lpPerIOData->NumberOfBytesRecvd,&lpPerIOData->Flags,&client,&fromlength,&lpPerIOData->overlap,NULL);rn[/code]rn
完成端口检测UDP和TCP
我有一个问题,就是我现在要利用一个<em>完成端口</em>既要监听TCP的数据,还要将rnUDP也与这个<em>完成端口</em>相关联,就是说我首先利用<em>完成端口</em>监听TCP的连接以后,就将rnaccept返回的socket与<em>完成端口</em>关联,然后进行I/0操作,然后我再要创建UDPsocket,而且我每次将UDP的数据<em>接收</em>到以后就需要通过<em>完成端口</em>转发给TCP,我不知道<em>完成端口</em>可以这样吗?哪位能帮我看看?如果各位有这方面的代码或者文档给我看看最好?多谢!
求UDP 的完成端口代码!!
谁有完整的UDP<em>完成端口</em>模型代码,请共享一下学习学习,100分!在线等待!
完成端口下的UDP的实现问题
由于在TCP协议下,我们有WSAAccept可以做循环来侦听客户端的连接,但是在UDP协议下,我们不能使用WSAAccept这个函数来获取客户端的数据,因此我采用了WSARecvFrom来一直做循环,从而获取客户端的数据。我在使用这个函数的时候,由于SOCKET只有一个,因此一创建了服务端的SOCKET就将该SOCKET与<em>完成端口</em>绑定。这样做了以后,程序几乎不能运行,在WSARecvFrom循环执行以后,2500次以后,SOCKET底层就报错,错误码为10055,不知道是哪个资源没有释放,或者说,这种处理UDP下的<em>完成端口</em>的做法本身就不对,请各位大侠指正。
内存共享函数OpenFileMapping,在release模式下返回NULL
共享<em>内存</em>的步骤为:CreateFileMapping创建共享的<em>内存</em>空间;OpenFileMapping打开共享<em>内存</em>,返回HANDLE型句柄;MapViewOfFile获取<em>内存</em>映射到该程序的<em>内存</em>,可以进行读写操作。         在实验中遇到了意外的情况,具体应用情景为:win10环境下使用共享<em>内存</em>在两个不同程序之间传递数据。在<em>release</em><em>模式</em>下第二个程序调用OpenFileMapping始终
VS内存访问冲突
char* roflszObfuscate(char* s, short i)rnrnrn unsigned long len = lolstrlen(s);rn //unsigned char *z = (unsigned char*)s;rn unsigned char c;rnrn for (unsigned long l = 0; l < len / 2; l++)rn rn c = s[l] ^ (l + i);rn s[l] = s[len - (l + 1)] ^ (l + i);//内在<em>访问冲突</em>。rn s[len - (l + 1)] = c;rn rn return s;rnrnrn在调用这个方法的时候,roflszObfuscate("lojrbz`bXPlbcftbAWoiprckP", 3)就会在上面标注的地方<em>内存</em><em>访问冲突</em>。这是怎么回事,如何解决?
C++ 内存访问冲突错误
(1)数组越界 (2)指针未定义
内存访问冲突的问题
一片<em>内存</em>,不加保护供多个线程访问,这样造成<em>内存</em><em>访问冲突</em>,问题是:rn这里的冲突只是变量的值不正确还是会抛出异常?
ReceiveFrom CAsyncSocket UDP 接收内存错误
请大家帮帮忙!!!!!在此先谢啦rn在主对话框类中 rn//int IpLong = sizeof(lpSockAddr);rn //m_MySocket.ReceiveFrom((char*)&m_ClientMessage, sizeof(m_ClientMessage), (sockaddr*)&lpSockAddr, &IpLong, 0);rn CString ClientIp = _T("");rn UINT ClientPort = 0;rn rn memset(&m_ClientMessage,0, sizeof(m_ClientMessage)); //这句出错 <em>内存</em>错误 在初始化函数里可以rnrnrnrn //m_MySocket.ReceiveFrom((char*)&m_ClientMessage, sizeof(ClientMessage), ClientIp, ClientPort, 0);rn rn rn //char Buf[30] = 0;rn //m_MySocket.ReceiveFrom((char*)Buf, 30, ClientIp, ClientPort, 0);rnrn //m_ClientMessage为下面这个结构体rn /*struct ClientMessagern rn int iMessageType; //类型rn union _messagern rn LoginMessage Login; //登陆rn EnrolMessage Enrol; //注册rn UpdateMessage Update; //更新rn ReqChatMessage ReqChat; //请求聊天rn message;rnrn ;*/rn每次运行ReceiveFrom都报 0x78b12920 (mfc90ud.dll) 处未处理的异常: 0xC0000005: 读取位置 0x000005b0 时发生<em>访问冲突</em>rn发送代码rnm_MySocket.SendTo((char*)&m_MessageToS,rn sizeof(m_MessageToS),rn (sockaddr*)&lpSockAddr, sizeof(lpSockAddr),0);rn 我想应该是参数设置错了!!可是。。。。
Release模式与Debug模式
最近跟着开发一个图像分析方面的软件,一趟跑起来需要15~20s。。。。。rn结果在师兄电脑上一跑,orz,1s。。。。Release<em>模式</em>!rn所以,计算密集的程序,即使是开发阶段,也不要用Debug<em>模式</em>。。。rn由此可见,原生代码的巨大优势。。。。。。。。
Debug模式与Release模式
在Release<em>模式</em>下用new动态创建的变量为什么不能在Debug<em>模式</em>下删除.rnrn我是这样做的,写了一个DLL,在DLL中:rnTest(LPTSTR* ppStr)rnrn*ppStr = new TCHAR[128];rnrn然后我把该DLL的Release版本在我的程序里调用(程序编译为Debug版本)rnLPSTR buf;rnTest(&buf);rndelete[] buf; // 程序运行到此就出错了,当程序也编译为Release时就没问题rnrn这是什么原因?高手指点下.rn
DEBUG模式与RELEASE模式
下面是我写的一个程序(控制台应用程序工程),在DEBUG<em>模式</em>下编译运行没有问题,但改成RELEASE<em>模式</em>下编译出现两个错误,错误信息如下:rnrn[code=C/C++]--------------------Configuration: dfse - Win32 Release--------------------rnLinking...rngg.obj : error LNK2001: unresolved external symbol __imp__mciSendStringA@16rnRelease/dfse.exe : fatal error LNK1120: 1 unresolved externalsrnError executing link.exe.rnrndfse.exe - 2 error(s), 0 warning(s)[/code]rnrn[code=C/C++]rn#includern#includern#includernrnrnLRESULT CALLBACK MyProc(rn HWND hwnd, // handle to windowrn UINT uMsg, // message identifierrn WPARAM wParam, // first message parameterrn LPARAM lParam // second message parameterrn);rnrnrnrnvoid ctrl_cdrom_door(rn LPCTSTR drivename ,//驱动器的名字如f:等.rn bool fOpen//弹出时用true,弹入时用falsern)rnrnTCHAR devstr[128],ctrlstr[128];rnwsprintf(devstr,"open %s type cdaudio alias mycd wait",drivename);rnwsprintf(ctrlstr,"set mycd door %s wait",fOpen?"open":"closed");rnmciSendString(devstr,NULL,0,NULL);rnmciSendString(ctrlstr,NULL,0,NULL);rnmciSendString("close mycd wait",NULL,0,NULL);rnrnrnint main()rnrn // TODO: Add your control notification handler code herern int i,cdnum=0;rn char str[3];rn for(i=0;i;rn if(DRIVE_CDROM==GetDriveType(str))rn cdnum++;rn if(cdnum==1)rn rn ctrl_cdrom_door(str,true); //打开光驱rn break;rn rn rn return 0;rnrn[/code]rnrn不知道是哪个地方的问题,望指点,另外能不能说说DEBUG<em>模式</em>与RELEASE<em>模式</em>在哪些方面有差别
关于完成端口的数据接收
使用<em>完成端口</em> 用WSASend和WSARecv来<em>接收</em>数据 还用WSAGetOverlappedResult嘛?rnrn在线等待 来者有分
完成端口接收和发送数据问题
[size=18px][color=#0000FF][b]我想封装一个<em>完成端口</em>类,WSARecv和WSASend函数都有一个参数是WSABUF数组,而数组需要连续的<em>内存</em>,如果我要发送或<em>接收</em>的数据大小不确定,则这个数组长度不确定,不能事先创建数组,是不是每次都要动态创建这个数组,然后从缓冲区链表上取下一个缓冲区把指针赋给数组成员的buf,数据收发完成后又要释放这个数组呢?如果是这样,几千个并发连接时岂不是频繁申请<em>内存</em>又释放,会不会对系统性能带来影响呢?还是有其它更好的方法呢,请高手指点一下。[/[/b][/color]size]
完成端口接收数据丢失
如题:rn用TCP协议写的<em>完成端口</em>,但是<em>完成端口</em>不能获得发送端发送的所有数据,这是什么原因呢?用抓包软件发现其实服务器端把所有的数据都<em>接收</em>到了,但是<em>完成端口</em>的程序并没有把所有的数据获取到!
完成端口接收不到数据
#include "Server.h"rn#include rn#include rn#include rnrnstatic DWORD WINAPI subThread( LPVOID lpParameter )rnrn DWORD bytesCnt;rn HANDLE cphdl = ( HANDLE )lpParameter;rn SOCKET sock;rn LPOVERLAPPED pOverLapped;rn char *buf;rnrn while( 1 ) rn GetQueuedCompletionStatus( cphdl, &bytesCnt, ( PULONG_PTR )&buf, rn ( LPOVERLAPPED * )&pOverLapped, INFINITE );rnrn std::cout << bytesCnt << std::endl;rn rnrn return 0;rnrnrnbool Server::create()rnrn WSADATA wsaData;rn WSAStartup( MAKEWORD( 2, 2 ), &wsaData );rnrn // 1. create a completion portrn HANDLE cpHdl = CreateIoCompletionPort( INVALID_HANDLE_VALUE, 0, 0, 1 );rn // 2. Create Socketrn SOCKET sock = createSock();rn // 3. create threadrn DWORD subThrdId;rn HANDLE thrdHdl = CreateThread( 0, 0, subThread, ( LPDWORD )cpHdl, 0, &subThrdId );rn CloseHandle( thrdHdl );rn // 4. listenrn startListen( sock, cpHdl );rnrn return true;rnrnrnSOCKET Server::createSock()rnrn SOCKET sock;rn sockaddr_in saServer;rn sock = WSASocket( AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED );rn saServer.sin_family = AF_INET;rn saServer.sin_addr.s_addr = inet_addr( "127.0.0.1" );rn saServer.sin_port = htons( 5150 );rn bind( sock, ( SOCKADDR * )&saServer, sizeof( saServer ) );rn listen( sock, 1 );rn return sock;rnrnrnvoid Server::startListen( SOCKET sock, HANDLE cpHdl )rnrn SOCKET acceptSock;rn char *buf = ( char * )GlobalAlloc( 0, 256 );rn WSABUF wsaBuf = 256, buf ;rn DWORD bytesCnt;rn DWORD flag = 1;rn WSAOVERLAPPED overLapped;rn bool ret = false;rnrn while( 1 ) rn acceptSock = WSAAccept( sock, NULL, NULL, 0, 0 );rn std::cout << "accept" << std::endl;rn CreateIoCompletionPort( ( HANDLE )acceptSock, cpHdl, ( DWORD )buf, 1 );rn ZeroMemory( &overLapped, sizeof( overLapped ) );rn char *msg = "main thread";rn WSARecv( acceptSock, &wsaBuf, 1, &bytesCnt, &flag, &overLapped, 0 );rn send( acceptSock, msg, strlen( msg ), 0 );rn int err = WSAGetLastError();rn rnrnrn不明白问题出在哪里,一些关键步骤都有检查过,没有什么错误。还请高手指教rn
完成端口的发送和接收问题
a我做了一个服务器利用了<em>完成端口</em>,rn现在有一个问题是,我把accept后的socket与<em>完成端口</em>关联后,rn接着就进行了相应的WsaSend,客户端就开始收数据,rn在工作线程当中GetQueuedCompletionStatus后,接着WsaSend,可是rn有时客户端也会给服务器发送一些控制字,我应该在哪里加入WsaRecv呢rn从GetQueuedCompletionStatus返回时如何判断是由recv还是send的情况呢
完成端口的数据接收错误问题
服务器端采用<em>完成端口</em>方式,每次有数据到达的时候将信息和socket负值到一个结构体上面并创建一个线程,然后将这个结构体作为参数传给线程,在线程中对用户的数据进行处理并且转发到相应的客户端上面,不知道为什么有的时候接受的数据和客户端发过来的信息不相同,在正确的信息后面又重复了一部分信息比如客户端发的是“qa1111 |message |fffffffffffffffff”但是接受的信息却变成了“qa1111 |message |fffffffffffffffffssage |fffffffffffffffff” rntypedef struct rn rn CString Buffer; rn SOCKET Socket; rnReq_Client_DATA,*Req_HANDLE_DATA; //客户端请求的与线程通讯的结构体 rn rn//在<em>完成端口</em>的工作线程中负值并创建线程 rnRequest->Socket=PerHandleData->Socket; rnRequest->Buffer=PerIoData->Buffer; rnCreateThread(NULL,0,ReqDATA,Request,0,&ThreadID); rn rn//线程函数 rnDWORD WINAPI WebDATA(LPVOID SenReqDATA) rn rn Req_HANDLE_DATA Request=new Req_Client_DATA; rn Request_DATA ReqDATA; //另外一个发送的结构体rn WSABUF DataSend; rn Request=(WebReq_HANDLE_DATA)SenReqDATA; rn strcpy(ReqDATA.Buffer,Request->Buffer); rn ReqDATA.Socketint=(long)Request->Socket; rn DataSend.buf=(char*)(&ReqDATA); rn DataSend.len=sizeof(ReqDATA); rn DWORD SendBytes,Flags; rn ..................... rn //处理并得到相应的名称 rn int i=0; rn while(iSocket); rn break; rn rn Sleep(1); rn AfxEndThread(0l); rn return 0; rn rn i++; rn rn AfxEndThread(0l); rn return 0; rn
udp接收
我刚开始学习C#。rn我希望用<em>udp</em>协议在后台<em>接收</em>(征听),不知用 <em>udp</em>clientrn如何实现!rn急死了!
完成端口 内存错误
以下程序是用iocp写的flash安全策略文件,当进行压力测试时,很多线程连接到此程序,会出现<em>内存</em>不能为read/write的情况。请帮忙看看什么原因?rnrn[code=C/C++]rn#define WIN32_LEAN_AND_MEANrn#include rn#include //加裁头文件rn#include //加载标准输入输出头文件rn#include rn#include rn#include rn#include "zdk/zerolib/ztempl/zinifile.h"rn#pragma comment(lib,"ws2_32.lib")rn#define MAXMAN 2rnrnusing namespace std;rnrn#define CP_RECV 1rn#define CP_SEND 2rnrntypedef struct rn rn OVERLAPPED Overlapped; rn WSABUF DataBuf; rn CHAR Buffer[100]; rn int OperateType;rn PER_IO_OPERATION_DATA, * LPPER_IO_OPERATION_DATA; rnrntypedef struct rn rn SOCKET Socket; rn PER_HANDLE_DATA, * LPPER_HANDLE_DATA; rnrnrnstatic char PermissionStr[2048] ="";rnSERVICE_STATUS ServiceStatus; rnSERVICE_STATUS_HANDLE hStatus; rnrnrnrnDWORD WINAPI ServerWorkerThread(LPVOID threadData); rnrnint WriteToLog(char* str)rnrn //获得程序路径rn char szPathTemp[512];rn GetModuleFileName(NULL, szPathTemp, 512); rn for (int i=strlen(szPathTemp); i>=0; i--)rn rn if (szPathTemp[i] == '\\')rn rn szPathTemp[i] = '\0';rn break; rn rn rn strcat(szPathTemp,"\\status.txt");rnrn //获取当前时间rn char chBuf[500];rn SYSTEMTIME stLocal;rn ::GetLocalTime(&stLocal);rn sprintf(chBuf,_T("%u/%u/%u %02u:%02u:%02u "), rn stLocal.wYear, stLocal.wMonth, stLocal.wDay,rn stLocal.wHour, stLocal.wMinute, stLocal.wSecond);rnrn strcat(chBuf,str);rnrn struct stat statbuf; rn FILE* log;rn log = fopen(szPathTemp, "a+");rn fstat(fileno(log),&statbuf);rnrn if (statbuf.st_size>1024*1024)rn rn fclose(log);rn log=fopen(szPathTemp,"w+");rn rnrn if (log == NULL)rn OutputDebugString("Log file open failed.");rn return -1;rn rnrn fprintf(log, "%s\n", chBuf);rn fclose(log);rn return 0;rnrnrnrnrnint main()rnrn //获得程序路径rn char szPathTemp[512];rn GetModuleFileName(NULL, szPathTemp, 512); rn for (int i=strlen(szPathTemp); i>=0; i--)rn rn if (szPathTemp[i] == '\\')rn rn szPathTemp[i] = '\0';rn break; rn rn rn strcat(szPathTemp,"\\config.ini");rnrn CZIniFile m_InitFile;rn if(! m_InitFile.LoadFromFile(szPathTemp))rn rn WriteToLog("读取配置文件失败!");rn return 0;rn rn CZString * pstr = m_InitFile.GetSubTitleItem("NetConfig","port",0);rn if( pstr == NULL)rn rn WriteToLog("读取本地监听端口失败!");rn return 0;rn rn int m_iBindPort = pstr->ToIntD();rn int countDomain = m_InitFile.GetSubTitleCount("DomainAndPort");rnrn sprintf(PermissionStr," \n");rn for(int i=0; iGetBuf();rn rn else rn rn strPort += pstr->GetBuf();rn if(j!=subTitleItemCount-1)rn rn strPort += ",";rn rn rn rn char subStr[1000] = "";rn sprintf(subStr," \n",strHost.GetBuf(),strPort.GetBuf());rn strcat(PermissionStr,subStr);rn rn strcat(PermissionStr,"");rnrn SOCKADDR_IN InternetAddr; rn SOCKET Listen; rn SOCKET Accept; rn HANDLE CompletionPort; rn SYSTEM_INFO SystemInfo; rn LPPER_HANDLE_DATA PerHandleData; rn LPPER_IO_OPERATION_DATA PerIoData; rn int i; rn DWORD RecvBytes; rn DWORD Flags; rn DWORD ThreadID; rn WSADATA wsaData; rn DWORD Ret; rnrn if ((Ret = WSAStartup(0x0202, &wsaData)) != 0) rn rn printf("WSAStartup failed with error %d\n", Ret); rn WriteToLog("WSAStartup failed with error");rn return 0; rn rnrn if ((CompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0)) == NULL) rn rn printf( "CreateIoCompletionPort failed with error: %d\n", GetLastError()); rn WriteToLog("CreateIoCompletionPort failed with error");rn WSACleanup();rn return 0; rn rnrn GetSystemInfo(&SystemInfo); rnrnrn for(i = 0; i < SystemInfo.dwNumberOfProcessors*2; i++) rn rn HANDLE ThreadHandle; rnrn if ((ThreadHandle = CreateThread(NULL, 0, ServerWorkerThread, CompletionPort, rn 0, &ThreadID)) == NULL) rn rn printf("CreateThread() failed with error %d\n", GetLastError()); rn WriteToLog("CreateThread() failed with error");rn WSACleanup();rn return 0; rn rnrn CloseHandle(ThreadHandle); rn rnrn if ((Listen = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0,WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET) rn rn printf("WSASocket() failed with error %d\n", WSAGetLastError()); rn WriteToLog("WSASocket() failed with error");rn WSACleanup();rn return 0; rn rnrn InternetAddr.sin_family = AF_INET; rn InternetAddr.sin_addr.s_addr = htonl(INADDR_ANY); rn InternetAddr.sin_port = htons(m_iBindPort); rnrn if (bind(Listen, (PSOCKADDR) &InternetAddr, sizeof(InternetAddr)) == SOCKET_ERROR) rn rn printf("bind() failed with error %d\n", WSAGetLastError()); rn WriteToLog("bind() failed with error");rn WSACleanup();rn return 0; rn rnrn if (listen(Listen, 5) == SOCKET_ERROR) rn rn printf("listen() failed with error %d\n", WSAGetLastError());rn WriteToLog("listen() failed with error");rn WSACleanup();rn return 0; rn rn elsern rn cout<Socket);rn rnrn rnrnrnrn[/code]
完成端口模式delphi源码
delphi版的iocp实现框架源码,来自网络。
完成端口模式的accept问题
主体上<em>完成端口</em>可以工作了.我打算让它可以暂停ACCEPT.rn于是暂停的时候,不再调用ACCEPT().rn结果是客户端仍然CONNECT()成功,发数据SEND()成功,数据全部发出.rn猜想可能是暂停以后上一次的ACCEPT()还没返回,继续开客户端,同上.同上..同上...rn服务端确实没有调ACCEPT().继续服务以后可以ACCEPT到之前开的SOCKET.rn服务端LISTEN的BACKLOG参数(2参)是10,改0也一样.rn问题可能出在哪了?rn我希望是暂停以后IOCP服务可以很干脆的拒绝掉新连接.
求UDP完成端口模型代码!
谁有完整的UDP<em>完成端口</em>模型代码,最好简单一点的。rn请共享一下学习学习,100分!在线等待!rnmail:mzwhj@yeah.net
关于UDP完成端口的问题二
服务器使用的UDP方式<em>完成端口</em>的方法,可以实现客户端和服务器的通信,但是发送大量数据包的时候很容易丢包,采用多次投递后效果也不是很好。不知道有没有好的解决方法,希望得到帮助。我用<em>完成端口</em>同样的方法实现TCP通信方式都没有问题。不知道UDP需要主要些什么?还有就是如果有UDP+<em>完成端口</em>做服务器的代码可否共享一下,邮箱:radylau@163.com
udp完成端口出现1234错误
GetQueuedCompletionStatus返回1234错误,<em>接收</em>数据用的是WSARecvFrom
完成端口可以用UDP协议吗?
请问<em>完成端口</em>可以用UDP协议吗?一般讲述都是ACCPET()然后关联到<em>完成端口</em>。但是UDP不需要这个函数,可以用<em>完成端口</em>吗?
UDP通讯中的完成端口问题
谁知道UDP协议下如何进行<em>完成端口</em>的开发。
有关libcurl内存访问冲突的问题
我在使用libcurl时,使用multi接口运行一段时间过后curl_multi_remove_handle接口会出现<em>内存</em><em>访问冲突</em>,时发生在libcurl.dll内部的,请问是什么原因导致的?是因为multi并发量有限吗?
还是UDP情况下 完成端口的问题。
我用WSARecvFrom 投递一个<em>接收</em>指定端口和IP的 IO请求rn我想问的是 是<em>接收</em>到指定端口和IP的数据后 GetQueuedCompletionStatus才返回rn还是 只要有指定大小的数据后 GetQueuedCompletionStatus 就返回?
关于Debug模式和Release模式
在下在写一本类似画图的小程序,可是在调试程序时画得好好的虚线到了Release<em>模式</em>下就变成了实线,在此请教各位.
发生内存访问冲突问题,请教?
我在运用MFC编写截屏程序的时候,当运行第一次的时候正确,第二次运行到image.Save(pStream,Gdiplus::ImageFormatJPEG);rn这句话的时候会出现0x1027c9c7(msvcr100d.dll)处有未经处理的异常:0xC0000005,读取位置0x01a2ffff时发生<em>访问冲突</em>。rn请问是什么原因啊?万分感谢!谢谢!rnrn同时这段代码该如何写的比较简洁一下?或者规范一些?rnrnrn源程序代码为:rn[code=C/C++]for(i=0;iQuadPart = 0;rn pStream->Seek(*move, STREAM_SEEK_SET, NULL);rnrn HRESULT hr=image.Save(pStream,Gdiplus::ImageFormatJPEG);rn image.Detach();rn ULONG nLen=0;rn move->QuadPart = 0; rn pStream->Seek(*move, STREAM_SEEK_SET, NULL);rn pStream->Read((void*)buffer,BUFSIZE,&nLen);rnrn pStream->Release(); rnrn delete move;rn GlobalFree(hMemBmp);rn ::SelectObject(hMemDC, hOldBitmap); rn ::DeleteObject(hBitmap);rn ::DeleteObject(hOldBitmap);rn ::ReleaseDC(hWnd, hSrcDC); rn ::ReleaseDC(hWnd,hMemDC);rn rn ::DeleteDC(hSrcDC); rn ::DeleteDC(hMemDC);rn ::DestroyWindow(hWnd);rn[/code]
关于完成端口接收次序的疑问
假设收到的数据被送到某个队列rn现在的情况是,由于该队列有多个线程访问,需要互斥保护起来,rn这就导致worker线程可能阻塞,设想这种情况,rnworker1 在把数据插入队列时阻塞,此时worker2启动,rn此时造成worker1和worker2竞争这个队列,结果是未知的,rn如果恰好两个数据都对应同一个socket,就可能造成<em>接收</em>数据的次序混乱,rn请问,如何避免或者解决该问题?
完成端口接收客户端信息的问题
我尝试用<em>完成端口</em>编写一个即时通讯软件的服务器端。在主进程里有一个while(true)的循环来侦听端口,如果accept后就会发送一个完成通知给工作者线程来进行IO处理。rn但是由一个问题就是:在一个用户登录的时候就accept了一次,然后工作者线程处理的就是客户端发来的用户名、密码等登录信息。由于工作者线程的数目肯定远少于客户的个数,所以工作者线程每次处理完IO请求后要把这个IO的socket关掉,等待下一次的IO处理时<em>接收</em>新的socket。那么,如果已登录的客户要发送聊天信息的时候,在客户端还是有一个connect上了的socket,但服务器端的工作者线程里已经没有accept这个客户的那个socket了。这样客户发的信息服务器端收不到,工作者线程也<em>接收</em>不到完成通知。难道要客户端每次发信息前都connect吗?rn代码的主要内容如下:rn主进程:rnrn建立<em>完成端口</em>rn建立工作者线程并与<em>完成端口</em>绑定rn建立监听套接字rnwhile(true)rnrnWSAAccept(。。。)rn把<em>接收</em>套接字与完成看到绑定rnWSARecv(。。。)rnrnrn工作者线程rnrnwhile(true)rnrnGetQueuedCompletionStatus(。。。)rn处理IO数据rn关闭socketrnrnrnrn
完成端口如何顺序接收和发送?
若是一段64KB的数据在一个WSASend投递出去,它是要整个32KB数据都发送出去后工作线程的GetQueuedCompletionStatus才会激活么?rn由于把IO投递给系统后,不知道它何时会真正的发送出去和<em>接收</em>,那么如何解决失序问题?
完成端口接收十六进制数问题
typedef structrnrn OVERLAPPED Overlapped;rn WSABUF Buffer;rn CHAR szMessage[DATA_BUFFER];rn DWORD BytesRecv;rn DWORD BytesSend;rnPER_IO_OPERATION_DATA, * LPPER_IO_OPERATION_DATA;rnrn使用WSARecv后,客户端发送的是十六进制的数据,存放在szMessage数组里,如何将将<em>接收</em>到的数据转换为char类型,并显示?
完成端口接收不到完成通知
CompletionPort=CreateIoCompletionPort(INVALID_VALUE, NULL, NULL, 0);rnCreateThread(...., WorkerThread, ...);rnsocket=WSASocket(AF_INET, SOCK_STREAM, IPPROTOCOL_TCP, ........);rnCreateIoCompletionPort(CompletionPort, socket, ...);rnbind and listen socket........................rnrnDWORD WorkerThread(LPVOID p)rnrn .........rn GetQueuedCompletion..........rn .........rnrnrnBOOL r=AcceptEx(socket, ..............., &overlapped);rn结果r==FALSE; 并且WSAGetLastError()==6。6对应的ERROR是INVALIED_HANDLE。rn大概说AcceptEx中有无效的句柄。rnrn服务器可以接受客户端的连接,但<em>完成端口</em>得不到通知。rn请大家帮忙分析一下,这是哪里错了。rnrn
完成端口接收结构的问题
<em>完成端口</em><em>接收</em>一个结构,,,如果这个结构在一次WSARecv中收完了当然完事大吉,什么都不用管,,但是如果这个结构一次没收完,怎样才能判断出有没有收完?因为这个结构是变长的,长度就放在结构的第一个成员里,要先得到这个成员的值,然后再和GetQueueCompletionStatus中返回的实际<em>接收</em>字节数对比才能知道有没有收完,,,头痛啊,,,,rnrn如果是定长的就好办了,,,高手救命。。。
为什么在DEBUG下没问题,在RELEASE下就报内存读写错呢?
int numread;rnchar buff[255];rnrnnumread = fread( buff, sizeof( char ), 200, m_pFile );rnrn当文件的内容>200时,RELEASE下就报<em>内存</em>读写错。rnrn
VS2015 Debug模式下正常,release下就报“ _D_SCL_SECURE_NO_WARNINGS”错误
一个MFC+pcl库实现的工程,debug<em>模式</em>下运行正常,因为要把exe拷到别的机子,需要编译<em>release</em>版本。rn 但是,报了以下错误rn1> _D_SCL_SECURE_NO_WARNINGSrn1>c1xx : fatal error C1083: 无法打开源文件: “_D_SCL_SECURE_NO_WARNINGS”: No such file or directoryrn1> stdafx.cpprn1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afx.h(38): warning C4996: 'MBCS_Support_Deprecated_In_MFC': MBCS support in MFC is deprecated and may be removed in a future version of MFC.rn1> C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afx.h(33): note: 参见“MBCS_Support_Deprecated_In_MFC”的声明rn![图片说明](https://img-ask.csdn.net/upload/201809/29/1538208285_720904.png)rn rn 应该怎么改呢,谢谢了~~
切换到Release模式后编译报警告?
LINK : warning LNK4089: all references to "SHELL32.dll" discarded by /OPT:REFrnrndebug<em>模式</em>下没有任何问题
关于完成端口使用过程中内存的释放
在<em>完成端口</em>使用过程中,两个变量PerHandleData,PerIoData由GlobalAlloc申请,rn在任务完成后用GlobalFree释放.问题是释放后程序所占用的<em>内存</em>并没有减少.rnrn我又新建了一个工程,在里面调用GlobalAlloc,GlobalFree进行<em>内存</em>操作,结果释放后很<em>内存</em>回到了原来的值.rnrn请问这种情况应当如何解决?
release模式问题
我用DirectDraw画图,让两张图交替显示rn在Debug没事rn换到<em>release</em><em>模式</em>,两张图就一起显示出来,没有交替显示rn更奇怪的是,我把<em>release</em>的exe文件拷到别的地方,然后把放图的文件夹rn名字改了,它居然还是运行的出来rn可是那个exe文件只有180k,我那两张图加起来有3M啊,难道<em>release</em>这么强?
debug 与 release 模式的区别
关于这两种调试<em>模式</em>的区别,网上也有许多解释,我不赘述了。debug更适合调试,<em>release</em>是发布版本。 如果用<em>release</em><em>模式</em>进行调试,就会在调试过程中出现各种奇怪的错误,虽然程序本身没有错,但是IDE给出的调试信息是乱的。所以不要再<em>release</em><em>模式</em>下调试。 之前从没用过<em>release</em><em>模式</em>,这次第一次使用,也算长长见识,毕竟重新装了一次vs2013.
vector在Release模式下出错
Debug下代码没有问题,Release下出错,通过LOG查看出错代码在:m_valvector.push_back(val);rn代码的执行时机是初始化的时候,大概是什么原因呢?
Release模式禁用NSLog
NSLog的运行会占用时间和设备资源,所以最好是以Release<em>模式</em>编译的程序不会用NSLog输出,而以Debug<em>模式</em>编译的程序将执行NSLog的全部功能。   Release<em>模式</em>通常会定义__OPTIMIZE__,Debug<em>模式</em>不会。将下面的代码放在头文件中,你就可以放心的使用NSLog了。   #ifndef __OPTIMIZE__ # define NSLog(…) NSLog(...
release模式下的问题
地铁环线控制系统程序。系统中某一控制地铁通讯的部分在debug<em>模式</em>下完全正常,<em>release</em><em>模式</em>下编译也正常,但生成的可执行文件在系统中运行第一次正常,关闭后运行第二次就会使整个系统界面都自动关闭。猜测是第一次运行后,虽然关闭了但占用的某些资源没有释放,这该如何测试查错呢
release模式下缺少动态链接库
在编译meshlab时候,<em>release</em><em>模式</em>下编译,完成后meshlab缺少一些Qt5的动态链接库,此时这些动态链接库到哪里找呢? 按照我的Qt5.8安装目录D:\Qt\Qt5.8.0,此时动态链接库应该在D:\Qt\Qt5.8.0\5.8\msvc2015_64\bin目录下。而此时D:\Qt\Qt5.8.0\Tools\QtCreator\bin目录下也有相应的动态链接库,但实际上这是支持Q...
Release 模式下进行debug
1. c++---&gt;general---&gt;Debug Information Format:Program Data Edit &amp; Continue(ZI) 2. C++---&gt;Optimization--&gt;Optimization:Disabled(/od) 3. C++---&gt;Optimization--&gt;InFunction Expantion:default copy m...
MFC的Release模式问题
本人新写了一个对话框程序,DEBUG下运行没问题,Release下运行也是正常的.但当我把Release下运行产生的EXE文件移到别的电脑上打开时,发现程序是混乱不堪,该打开显示的子对话框一个都没有显示,在对话框上画的线也乱了,跟在我自己电脑上运行的结果有非常大的出入。不知是何原因,请高手帮忙。注:程序里没有条件编译之类的语句,也未对Release目录设置进行过任何的改动,都是默认下的设置,自己电脑上运行的结果是一切正常!
release模式下出现错误。
debug<em>模式</em>下运行编译没有错误,但是换在<em>release</em><em>模式</em>下运行编译出现错误。错误是:我写的一个组件在类或命名空间里不存在。这个是什么错误请大家指点。
多线程和io完成端口.内存的理解
win32多线程用io<em>完成端口</em>进行异步操作.但是操作的时候,没有对所操作的<em>内存</em>进行保护,也就是说不是线程安全的,我这么理解对么?rnrn比如读取文件.rn 0.申请缓冲区(buffer)rn 1.打开文件(设置FILE_FLAG_OVERLAPPED )rn 2.创建io<em>完成端口</em>rn 3.将<em>完成端口</em>和文件句柄关联起来rn 4.创建线程a.调用GetQueuedCompletionStatusrn 5.调用ReadFile(..,buffer,size,...)rn 执行步骤5之后,操作系统来读取文件,然后通知线程a,读取了多少字节等等,读取的内容存放在主线程申请的buffer中.如果我在系统读取中对buffer进行操作,就会破坏这一段<em>内存</em>中保存的数据.对么?rnrnrnio<em>完成端口</em> 如果不和设备相关联,使用PostQueuedCompletionStatus和GetQueuedCompletionStatus,我是否能理解成只是一个线程向另一个指定线程发了一个消息?rnrnio<em>完成端口</em>不和设备相关联的时候,a线程想将bufferA中的数据发送给b线程,发送之后马上就会重新使用bufferA,那么只能创建一个副本,然后用io<em>完成端口</em>发送通知.这样理解对么 ?rn多线程之间互相发送<em>接收</em>数据,用io<em>完成端口</em>,应该关联什么设备?! <em>内存</em>映射?
win7x64简单测试驱动程序报“...访问冲突”错误!
在win7 x64 平台上编写驱动程序:rnrn我有如下几个文件:rndbsmsg.h:rn/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++rn+ +rn+ dbgmsg.h +rn+ +rn+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/rn#ifdef LOG_OFFrn#define DBG_TRACE(src,msg)rn#define DBG_PRINT1(arg1)rn#define DBG_PRINT2(fmt,arg1)rn#define DBG_PRINT3(fmt,arg1,arg2)rn#define DBG_PRINT4(fmt,arg1,arg2,arg3)rn#elsern#define DBG_TRACE(src,msg) DbgPrint("[%s]:%s\n",src,msg)rn#define DBG_PRINT1(arg1) DbgPrint("%s",arg1)rn#define DBG_PRINT2(fmt,arg1) DbgPrint(fmt,arg1)rn#define DBG_PRINT3(fmt,arg1,arg2) DbgPrint(fmt,arg1,arg2)rn#define DBG_PRINT4(fmt,arg1,arg2,arg3) DbgPrint(fmt,arg1,arg2,arg3)rn#endifrnrnctrlcode.h:rn/* FILE_DEVICE_RK表示一种文件设备类型,在此是我们自己创建的文件设备类型 */rn#define FILE_DEVICE_RK 0x00008001rn#define IOCTL_TEST_CMD \rn CTL_CODE(FILE_DEVICE_RK, 0x801, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)rnrndevice.h:rn#include "ntddk.h"rnconst WCHAR DeviceNameBuffer[] = L"\\Device\\msnetdiag";rnconst WCHAR DeviceLinkBuffer[] = L"\\DosDevices\\msnetdiag";rnconst char UserlandPath[] = "\\\\.\\msnetdiag";rnrnkmd.c:rn#include "ntddk.h"rnrn#include "dbgmsg.h"rn#include "ctrlcode.h"rn#include "device.h"rnrnrn/* MSNetDigaDeviceObject代表我们创建的设备 */rnPDEVICE_OBJECT MSNetDiagDeviceObject;rn/* DriverObjectRef代表我们注册的驱动 */rnPDRIVER_OBJECT DriverObjectRef;rnrnrnvoid TestCommand(PVOID inputBuffer, PVOID outputBuffer, ULONG inputBufferLength, ULONG outputBufferLength);rnNTSTATUS defaultDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);rnNTSTATUS dispatchIOControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);rnrnrnNTSTATUS RegisterDriverDeviceName(IN PDRIVER_OBJECT DriverObject);rnNTSTATUS RegisterDriverDeviceLink();rnrnVOID Unload(IN PDRIVER_OBJECT DriverObject)rnrn PDEVICE_OBJECT pdeviceObj;rn UNICODE_STRING unicodeString;rn DBG_TRACE("OnUnload","Received signal to unload the driver");rn pdeviceObj = (*DriverObject).DeviceObject;rn if(pdeviceObj != NULL)rn rn DBG_TRACE("OnUnload","Unregistering driver's symbolic link");rn RtlInitUnicodeString(&unicodeString, DeviceLinkBuffer);rn IoDeleteSymbolicLink(&unicodeString);rn DBG_TRACE("OnUnload","Unregistering driver's device name");rn IoDeleteDevice((*DriverObject).DeviceObject);rn rn return ;rnrn/* rn * DriverObject相当于注册的驱动,DeviceObject为对应某个驱动设备rn * 一个驱动可以创建多个设备,然后通过DriverObject::DeviceObject和rn * DeviceObject::NextDevice遍历整个设备链表rn */rnNTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)rnrn int i;rn NTSTATUS ntStatus;rn DBG_TRACE("Driver Entry","Driver has benn loaded");rn for(i=0;iRegisterDriverDeviceName->IoCreateDevice就会报:rnrnkmd.sys 中的 0x00000001403aa527 (ntoskrnl.exe) 处有未经处理的异常: 0xC0000005: 读取位置 0x0000000000000001 时发生<em>访问冲突</em>rnrn的错误。请问应该怎么解决啊?rn
Win32 UDP 单向接收
#include &amp;lt;Winsock2.h&amp;gt;#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;iostream.h&amp;gt;#include &amp;lt;time.h&amp;gt;#include &amp;lt;math.h&amp;gt; #define  RECVBUF_LEN    1500#define  UDPPORT        60000#define  FUNCODE_D...
UDP接收及ringbuffer处理
UDP<em>接收</em>及ringbuffer处理 #include &quot;ringbuffer.h&quot; ofstream filetest1(&quot;ringbuff.txt&quot;); fstream NetDataReader::filetest; RingBuffer* NetDataReader::databuffer = new RingBuffer(); SOCKET NetD...
UDP接收和发送数据
如果数据包比较大,能否和TCP套接字一样做个WHILE循环来接受和发送呢?rn还有UDP套接字可以用select方法异步的么
UDP广播接收问题
问题如下:rnrn试了下在两个机器上运行,只有其中一台机器上的程序能收到信息~~rnrnrn[code=C/C++]rn PIP_ADAPTER_INFO pAdapterInfo;rn pAdapterInfo = (IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO));rn unsigned long ulLen = sizeof(IP_ADAPTER_INFO);rn GetAdaptersInfo(pAdapterInfo,&ulLen);rn CString mask = (CString)pAdapterInfo->IpAddressList.IpMask.String;rn ip = inet_ntoa(*(struct in_addr *)*hostinfo->h_addr_list);rn u_long umask = CStringToDword(mask);rn u_long ipaddr = CStringToDword(ip);rn u_long net = umask&ipaddr;rn broad = net|(~umask);rn free(pAdapterInfo);rn pAdapterInfo = NULL;rnrn SOCKADDR_IN addr;rn addr.sin_family = AF_INET;rn addr.sin_port = m_uiPort;rn addr.sin_addr.S_un.S_addr = ipaddr;rnrn reVal = bind(m_srSocket,(SOCKADDR*)&addr,sizeof(addr));rn AfxBeginThread(RecvThread,this);rn bool opt = 1;rnrn setsockopt(m_socket,SOL_SOCKET,SO_BROADCAST,(char *)&opt,sizeof(bool));rn char fuck[5] = "test";rnrn SOCKADDR_IN sendaddr;rn sendaddr.sin_family = AF_INET;rn sendaddr.sin_port = m_uiPort;rn sendaddr.sin_addr.S_un.S_addr = broad;rnrn reVal = sendto(m_socket,fuck,sizeof(fuck),0,(SOCKADDR*)&sendaddr,sizeof(sendaddr));rnrnrn//下面的代码是RecvThread里面的,CStringToDword是定义的一个把IP字符串转换成DWORD类型的函数rnrn char test[5];rn SOCKADDR_IN clientaddr;rn int nlen = sizeof(clientaddr);rn while(true)rn rn int reVal = recvfrom(pArg->m_srSocket,test,sizeof(test),0,(SOCKADDR*)&clientaddr,&nlen);rn rn rn if(SOCKET_ERROR != reVal)rn rn CString temp;rn temp = test;rn AfxMessageBox(temp);rn rn Sleep(500);rn rnrn[/code]
udp接收问题
我用<em>udp</em>接受数据时,如果用一个比较大的缓冲区接受,没有什么问题,数据一次全部收到,但用小一点的缓冲区多次<em>接收</em>的话,只有第一次收到一部分数据,继续recefrom时便阻塞了。是怎么回事?
vb.net udp接收失败
<em>udp</em><em>接收</em>的时候报错rn Sub listen()rn Dim ip As System.Net.IPAddress = System.Net.IPAddress.Parse("192.168.20.255")rn Dim port As Integer = 5689rn Dim ipep As New System.Net.IPEndPoint(ip, port)rn Dim my<em>udp</em> As New System.Net.Sockets.UdpClientrn Dim bytes As Byte()rn Tryrn bytes = my<em>udp</em>.Receive(ipep)'在这里报错,’提供了一个无效的参数‘rn Catch ex As Exceptionrn MsgBox(ex.ToString)rn End Tryrn End Subrnrn请指教~~!
QT5 UDP通讯之接收
QT环境下实现UDP通讯的数据<em>接收</em>----------------------------------
UDP数据接收测试
IP连接两台PC,在一台PC上运行RECEIVE_UDP,<em>接收</em>另外一台PC发来的UDP数据并保存。需要设置另外一台PC的IP地址,选择数据存储目录和文件名。
udp接收发送
可以用的UDP传输例子,两个文件<em>接收</em>和发送端
udp发送接收图片
socket使用<em>udp</em>方式发送和<em>接收</em>图片,包含图片测试
UDP发送和接收文件
使用idUDPClient.SendBuffer发送几K的文件正常,发送稍大一些就的出错:10041,有没有使用idUDPClient发送大一些文件的范例?
UDP接收实例
1.通讯类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; namespace UDPDataPack {    pub
udp接收发送数据
发送端package cn.conest.<em>udp</em>;import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.Unknow
UDP的发送与接收
[color=brown]1、UDP<em>接收</em>[/color] [code=&quot;java&quot;] package com.boonya.<em>udp</em>; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; i...
python网络编程之udp——接收与发送数据
网络编程之<em>udp</em> 网络协议有<em>udp</em>和tcp等等,今天就记录一下<em>udp</em>的<em>接收</em>数据与发送数据 发送数据 比较基础的代码案例,能够实现基础的进程间通信, 在这里如何检查代码成功实现了呢?? 我们需要借助一个小的APP助手 ——tcp调试助手 tcp调试助手 效果图如下(版本不一致可能会导致不一致,但是大致一样): 代码实现流程: 创建套接字 输入数据 发送数据 (方法参数 发送的的数据(注意编码,是...
大数据 UDP接收问题
[size=18px]在windows xp下采用socket开发一程序<em>接收</em>UDP数据,<em>接收</em>速度为800Mbps,开始工作的一段时间(几十分钟到几小时不等)收数正常,一段时间后,<em>接收</em>速度变慢,大部分UDP数据包<em>接收</em>不到,但用抓包工具可以抓到socket未收到的UDP包,分析抓到的UDP包未找到异常;重新启动程序<em>接收</em>速度还是很慢,只有在重新启动系统或重启网卡后socket程序<em>接收</em>数据才能正常,请教您有遇到类似问题吗?有什么建议,谢谢![/size]
UDP接收高速数据包?
各位高人,rn我在windows下使用<em>udp</em><em>接收</em>大概20M左右的流媒体数据,发现丢包情况比较严重,要怎样才能做到少丢包或不丢包呢rn求解...
UDP的recvfrom接收问题
有三台电脑rnA: IP:192.168.1.2,Mask:255.255.255.0, 网关:192.168.1.16rnB:IP:192.168.1.13,Mask:255.255.255.0, 网关:192.168.1.16rnC:IP:192.168.0.2,Mask:255.255.255.0, 网关:192.168.0.16rnB作为A和C的信令解释中间方,要与A、C通信,均使用UDP协议rnA中程序a的<em>接收</em>端口是2000rnB中程序b的<em>接收</em>A的端口是2001rnB中程序b的<em>接收</em>C的端口是10000rnC中程序c的<em>接收</em>B的端口是10000rn主要症状是:rnb可以<em>接收</em>到a和c的数据,但从抓包软件(Ethereal)上看到,A和C的数据包到达了B(比如100个),b大部分能处理(大约80到90个左右),并没有全部处理。rnb程序是用VC写的命令行程序,网络方面直接使用Winsock的API写的网络,要写记录到磁盘文件中。rn分别创建了<em>接收</em>A和C的线程,所用的都是基本的API,就是不知道什么原因?rnUINT RecvCMsg(LPVOID pvParam)rnrn SOCKADDR_IN tosin;rn int tolen = sizeof(SOCKADDR_IN);rn memcpy(&tosin, &SendCtosin, tolen);rnrn int r=0;rn SOCKADDR_IN fromaddr;rn int fromlen=sizeof(SOCKADDR_IN);rn while (TRUE)rn rn char* pBuffer=new char[256];rn retlen = recvfrom(RecvCSock, pBuffer, 256, 0, (SOCKADDR*)&fromaddr, &fromlen);rn if (retlen, r);rn delete[] pBuffer;rn rn r++;rn rn return 0;rnrn尝试解决方法:rn1、调试时发现主要是recvfrom那阻塞了,按道理有数据来时(抓包软件上看到),recvfrom应该返回的而不应该继续阻塞。现在的问题好像在recvfrom阻塞,错过几个包后再响应过来。rn2、听说UDP应用上,<em>接收</em>和发送是不能一个端口的,但B新创建了一个NewCSock(比如说10001端口的socket),sento时,这个新socket代替10000端口产生的socket,C却收不到B发过去的数据包。rnsendto(RecvCSock, buffer, retlen, 0, (SOCKADDR*)&tosin, tolen);改为rnsendto(NewCSock, buffer, retlen, 0, (SOCKADDR*)&tosin, tolen);rn3、recvfrom之前用select的方法也还是这个问题rn4、会不会是处理函数中有sendto,然后使用recvfrom<em>接收</em>会出现问题?rn请高手们指教!!!!十分感谢!
udp接收的问题
如果UDP服务器调用RecvFrom(s, buff, 100, ...)<em>接收</em>客户端数据,而这是多个客户端同时向服务器发送50个字节的数据包,问服务器调用一次RecvFrom()会不会收到数据包长度等于100的情况,而这个数据包中的数据分别来源于不同的客户端?
udp发送和接收源代码
<em>udp</em>发送和<em>接收</em>源代码,简单示例,实现基本功能。
udp组播发送接收
<em>udp</em>组播发送<em>接收</em>的发送端, <em>接收</em>端,测试程序
UDP接收赛车类游戏数据
代码主要是针对尘埃游戏进行实时数据读取并显示,读取方式为UDP方式
简单的UDP接收程序
简单的UDP<em>接收</em>端程序,没用WHLIE(TRUE)来<em>接收</em>
VC++ UDP 发送接收
VC++ UDP 窗口发送及<em>接收</em>的源码,并画图,其他cpp非子窗口读取父窗口的函数
udp MFC接收程序
基于MFC 单对话框的UDP<em>接收</em>程序 有丰富的注释 比较简单
传智博客spring.ppt下载
传智博客spring.ppt 传智博客spring.ppt 传智博客spring.ppt 相关下载链接:[url=//download.csdn.net/download/wushanru/3212737?utm_source=bbsseo]//download.csdn.net/download/wushanru/3212737?utm_source=bbsseo[/url]
网吧管理系统论文下载
关于网吧计费系统的毕业设计,用的着的可以下载 相关下载链接:[url=//download.csdn.net/download/wujianhuahaha/3868010?utm_source=bbsseo]//download.csdn.net/download/wujianhuahaha/3868010?utm_source=bbsseo[/url]
codewarrior 开发套件入门指南下载
codewarrior 入门指南,帮你轻松入门 Freescale codewarrior 相关下载链接:[url=//download.csdn.net/download/u012219594/6308289?utm_source=bbsseo]//download.csdn.net/download/u012219594/6308289?utm_source=bbsseo[/url]
相关热词 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法 c# gmail 发邮件 c# 多层文件
我们是很有底线的