1个MFC对话框程序,ADiaLog 类中创建了1个数据发送线程 static UINT SendData();
在ADiaLog 有1个BUTTON ,Click后显示 BDialog,在BDialog中的edit中输东西,奇怪的是一切换
输入法,界面就死了,从来没遇到过这种问题。找了半天也没找到原因,只知道跟SendData线程有关。
不知道是啥原因?有人能解答么?
在ADiaLog 有1个BUTTON ,Click后显示 BDialog,在BDialog中的edit中输东西,奇怪的是一切换
输入法,界面就死了,从来没遇到过这种问题。找了半天也没找到原因,只知道跟SendData线程有关。
不知道是啥原因?有人能解答么?
解决方案 »
- 鼠标穿透窗口
- 为什么在单文档程序里CMFCToolBar设置工具栏按钮大小//CMFCMenuBar的大小也会被改变?
- 菜鸟求部分代码解析(C++ MFC)10进制转16进制、CRC-16校验
- 各位高手对话框怎么没有缩小放大按钮,只有关闭按钮,如何添添加
- win32 SDK如何用语音控制键盘按键
- 如何hook另一进程(或几个)的recv函数
- [ 提问 ]如何才能SubClass别的进程的窗口?
- 怎么样能够让我的dll开机后就能够自动运行?
- 高精度延时,延时几年也不卡。(有点小问题,麻烦高手帮忙修改下)
- 请问如何用SHELLEXECUTE的返回值来关闭由SHELLEXECUTE启动的程序?
- 怎么调用h264对视频进行编码和解码?
- 程序类型越界问题 求教高手 解决重谢!
* send data thread
*/
UINT SendData(LPVOID pParam)
{
CADlg* pMdlg = (CADlg*)pParam;
CSocket sockClient;
BOOL b_Connect = FALSE ;
BOOL b_isSocketCreated = FALSE ; //socket created
BOOL b_Sending = FALSE ; //LOCK
CString szDescription ;
BYTE bRec[8];
int i = 0 ;
while (1) {
while(!b_isSocketCreated && i < 3){ //not create socket
b_isSocketCreated = sockClient.Create();
i++;
}
if(!b_isSocketCreated){
i = 0 ;
//pMdlg->m_info.AddString(getcurtime() + "Socket not Create,Wait for 10 Sec ...");
Sleep(10000);
}
while(!b_Connect && i < 3){
b_Connect = sockClient.Connect(pMdlg->psDestIp,PORT);
i++;
}
if(!b_Connect){
i = 0 ;
Sleep(10000);
//pMdlg->m_info.AddString(getcurtime() + "Socket Connect Error ... ");
}
if(b_Connect && (pMdlg->m_ulSendBufLength != 0)){ // not sending data
unsigned long ulSendedlength = 0 ;
if(!b_Sending){
b_Sending = TRUE ;
ulSendedlength = sockClient.Send(pMdlg->m_buffer,pMdlg->m_ulSendBufLength);
if(ulSendedlength == pMdlg->m_ulSendBufLength){
szDescription.Format("%s%d%s","数据报文发送成功,共发送",pMdlg->m_ulSendBufLength,"字节文件");
pMdlg->m_info.AddString(getcurtime() + szDescription);
pMdlg->m_ulSendBufLength = 0 ;
b_Sending = FALSE ;
Sleep(3000);
}
}
/*else{
pMdlg->m_info.AddString(getcurtime() + "数据已发送,等待PacketX反馈数据包..." );
sockClient.Receive(bRec,8);//阻塞
if (RECOK == bRec[0] + bRec[1]*256 ){
szDescription.Format("%s%d%s","数据报文发送成功,共发送",pMdlg->m_ulSendBufLength,"字节文件");
pMdlg->m_info.AddString(getcurtime() + szDescription);
pMdlg->m_ulSendBufLength = 0 ;
b_Sending = FALSE ;
}
Sleep(5000);
}*/
}
Sleep(10000);
}
sockClient.Close();
b_isSocketCreated = FALSE ;
b_Connect = FALSE ;
return 0 ;
你改成用消息来搞
譬如
pMdlg->m_info.AddString(getcurtime() + szDescription); 改为通过向pMdlg所指的对话框post一个消息,并将getcurtime() + szDescription作为参数然后由那个消息响应函数来执行m_info.AddString操作