自己写的两个函数,包含在一个文件里的 BOOL UploadParser(LPCTSTR str,LPCTSTR msg ,SOCKET& Socket)
{ //调用完就在这行就不往里走了,参数都接到了
……
}if(m_str=="UploadLog")
{
UploadParser(m_str,m_temp,sClient); //就这里调用的,结果UploadParser的参数可以接收到传上来内容,但是却进不了函数体
}WHY????
{ //调用完就在这行就不往里走了,参数都接到了
……
}if(m_str=="UploadLog")
{
UploadParser(m_str,m_temp,sClient); //就这里调用的,结果UploadParser的参数可以接收到传上来内容,但是却进不了函数体
}WHY????
解决方案 »
- 送分100分:关于DATACOMBO中DATAFIELDS值发生改变对DATACOMBO编辑栏当前显示值有无影响
- 文件读取 输入输出 急急急急
- 拆分窗体的界面问题
- 如何用xslt中提取字符串
- ***.exe contains an invalid path 救命
- 像qq游戏中大厅或者具体游戏的窗口是sdi还是dlg啊?
- 请问ADO调用存储过程的"不支持此接口"的错误是那些原因造成的?
- How to change the program uninstall icon in Control Panel->Add\Remove programs??
- 如何设置Label控件的背景颜色,其实也是一个CStatic控件?
- 特向各位高手请教: 一个控件定制的问题 ...100分 有请!
- 在VC6.0内,为什么打不开CDex工程?
- vc使用dll的问题!!!
m_str,m_temp,sClient这三个参数中sClient是连接socket的吗,那么你的socket设置是否有问题呢??
他装了visual assist,本来代码不是执行到这行的,
visual assist给弄乱了,显示成了这行。
③ { //调用完就在这行就不往里走了,参数都接到了
…… //这里看都不看一眼
}
try
{
if(m_str=="UploadLog")
{
① UploadParser(m_str,m_temp,sClient);
}
}
catch(...)
{
④ ……
}上面是执行的顺序
BOOL UploadParser(LPCTSTR str,LPCTSTR msg ,SOCKET& Socket)
函数改一下:
BOOL UploadParser(LPCTSTR str,LPCTSTR msg ,SOCKET* pSocket)
试一下呢?
BOOL UploadParser(LPCTSTR str,LPCTSTR msg ,SOCKET& Socket)
函数改一下:
BOOL UploadParser(LPCTSTR str,LPCTSTR msg ,SOCKET* pSocket)
试一下呢?
如果是在动态链接库中,Rebuild All DLL,再同步左右的库&Rebuild All
{
SOCKET conn=(SOCKET)lParam;
while(1)
{
if(::WaitForSingleObject(g_eventKill,0)==WAIT_OBJECT_0)
return 0L;
SOCKET Client;
sockaddr_in sockaddr;
int len=sizeof(sockaddr);
Client=accept(conn,(SOCKADDR*)&sockaddr,&len);
if(Client!=INVALID_SOCKET)
{
AfxBeginThread(OnRecvThread,(LPVOID)Client,THREAD_PRIORITY_NORMAL,0,0,NULL);
}
}
return 0L;
}接到了就起这个UINT CVSDlg::OnRecvThread(LPVOID lParam)
{
SOCKET Client=(SOCKET)lParam;
while(1)
{
char buf[MAX_BUFFER];
memset(buf,0,MAX_BUFFER);
if(recv(Client,buf,MAX_BUFFER,0)!=SOCKET_ERROR)
{
CString m_temp;
m_temp.Format("%s",buf);
m_temp.Trim();
Sub(Client,m_temp);
}
else
{
return 0L;
}
}
return 0L;
}
然后再起 SUB
void Sub(SOCKET sClient,LPCTSTR m_temp)
{
……try
{
if(m_str=="UploadLog")
{
UploadParser(m_str,m_temp,sClient);
}
}
catch(...)
{
……
}}调用 BOOL UploadParser(LPCTSTR str,LPCTSTR msg ,SOCKET& Socket)
{ //调用完就在这行就不往里走了,参数都接到了
…… //这里看都不看一眼
}结果就出现了刚才的一幕
BOOL UploadParser(LPCTSTR str,LPCTSTR msg ,const SOCKET& Socket)
{
SOCKET conn=(SOCKET)lParam;
SOCKET Client;
sockaddr_in sockaddr;
int len=sizeof(sockaddr); while(1)
{
if(::WaitForSingleObject(g_eventKill,0)==WAIT_OBJECT_0)
return 0L;
Client=accept(conn,(SOCKADDR*)&sockaddr,&len);
if(Client!=INVALID_SOCKET)
{
AfxBeginThread(OnRecvThread,(LPVOID)Client,THREAD_PRIORITY_NORMAL,0,0,NULL);
}
}
return 0L;
}接到了就起这个UINT CVSDlg::OnRecvThread(LPVOID lParam)
{
SOCKET Client=(SOCKET)lParam;
while(1)
{
char buf[MAX_BUFFER];
memset(buf,0,MAX_BUFFER);
if(recv(Client,buf,MAX_BUFFER,0)!=SOCKET_ERROR)
{
CString m_temp;
m_temp.Format("%s",buf);
m_temp.Trim();
Sub(Client,m_temp);
}
else
{
return 0L;
}
}
return 0L;
}
然后再起 SUB
void Sub(SOCKET sClient,LPCTSTR m_temp)
{
……try
{
if(m_str=="UploadLog")
{
UploadParser(m_str,m_temp,sClient);
}
}
catch(...)
{
……
}}调用 BOOL UploadParser(LPCTSTR str,LPCTSTR msg ,SOCKET& Socket)
{ //调用完就在这行就不往里走了,参数都接到了
…… //这里看都不看一眼
}结果就出现了刚才的一幕
#define MAX_BUFFER 65535
然后使用的时候
char buf[MAX_BUFFER] //结果就错了哈我改成#define MAX_BUFFER 32768U 之后就好拉巧合就巧合在我别的函数都没有使用到这个缓冲区,就那个函数用了,所以我也误导大家了,一直都以为是传参数的问题,那就中传法都是正确的,直接传,或传引用,或传指针,所以都不是传参的问题。谢谢大家对我的帮助,这就揭贴了
{
……try
{
if(m_str=="UploadLog")
{
UploadParser(m_str,m_temp,sClient);
}
}
catch(...)
{
……
}}调用 BOOL UploadParser(LPCTSTR str,LPCTSTR msg ,SOCKET& Socket)
{ //调用完就在这行就不往里走了,参数都接到了
…… //这里看都不看一眼
}结果就出现了刚才的一幕>>要注意哦,你是在try里调用的BOOL UploadParser(LPCTSTR str,LPCTSTR msg ,SOCKET& Socket)
如果你在{
... ...
}
之中出了错,特别是rum-time的错误,当然就不会执行这里的代码了,就会转到catch之中去执行错误处理程序了。在这里LPCTSTR str,LPCTSTR msg是CString类,一般不会出错,出错的地方很可能是与SOCKET&Socket包含错误的信息有关。
由于没有读到{
... ...
}的内容,所以我无法确定我的猜想是不是正确。由于我在外面打工,只是今天才有时间回校,请楼主自行判断,或者其他高手帮忙指教。sorry,我对多线程的编程也不是很熟。