小弟我的有关问题是否属于多线程
我的问题是否属于多线程
我的工作是创建一个对话框,点击对话框中的一个按钮(还有其他按钮),对应的是接收数据,并对这些数据进行处理,然后保存在一个.txt中,同时把这些数据显示在对话框中。
我的问题是:我应该把哪部分拿出来用子线程处理
我尝试了这么做,按钮->对应创建一个线程->调用线程函数->接收数据(期间处理数据),然后通知主线程显示数据。尝试这么做了之后对话框上其他按钮在显示数据的同时点击没有反应,就不知道什么原因?
------解决方案--------------------
用sendMessage试试
------解决方案--------------------
你线程DWORD WINAPI FuncThread(LPVOID lpParamter) 只是执行一次就自己退出去了,这样线程就没什么意义,你需求是这样吗?
一般线程中会有一个死循环来处理你要处理事情
DWORD WINAPI FuncThread(LPVOID lpParamter)
{
while(你的退出条件)
{
// 你要处理的事情
}
return 0;
}
------解决方案--------------------
sendmessage 也行
回调函数也行啊
------解决方案--------------------
你怎么保存的数据 ?
我的工作是创建一个对话框,点击对话框中的一个按钮(还有其他按钮),对应的是接收数据,并对这些数据进行处理,然后保存在一个.txt中,同时把这些数据显示在对话框中。
我的问题是:我应该把哪部分拿出来用子线程处理
我尝试了这么做,按钮->对应创建一个线程->调用线程函数->接收数据(期间处理数据),然后通知主线程显示数据。尝试这么做了之后对话框上其他按钮在显示数据的同时点击没有反应,就不知道什么原因?
void CmyprojectDlg::OnBnClickedButton2()
{
DWORD threadID;
HANDLE m_hThread=CreateThread(NULL,0,FuncThread,this,0,&threadID);
Sleep(1);
CloseHandle(m_hThread);
}
DWORD WINAPI FuncThread(LPVOID lpParamter)
{
CmyprojectDlg *dlg =(CmyprojectDlg*)lpParamter;
dlg->receive_data(); //接受数据
return 0;
ExitThread(0);
}
void CmyprojectDlg::receive_data(void)
{
//有这么一句,是接收数据
iRecv=recvfrom(sClient,recv_buf,sizeof(recv_buf),0,(struct sockaddr*)&ser,&iLen_ser);
处理数据;
if(detected==1)
{
HWND hWnd = (HWND)(AfxGetApp()->GetMainWnd()->GetSafeHwnd());
::PostMessage(hWnd,WM_DISPLAY,(WPARAM)v_final,NULL);
}
}
LRESULT CmyprojectDlg::OnDisplay(WPARAM wParam,LPARAM lParam) //显示数据
{
}
------解决方案--------------------
用sendMessage试试
------解决方案--------------------
你线程DWORD WINAPI FuncThread(LPVOID lpParamter) 只是执行一次就自己退出去了,这样线程就没什么意义,你需求是这样吗?
一般线程中会有一个死循环来处理你要处理事情
DWORD WINAPI FuncThread(LPVOID lpParamter)
{
while(你的退出条件)
{
// 你要处理的事情
}
return 0;
}
------解决方案--------------------
sendmessage 也行
回调函数也行啊
------解决方案--------------------
你怎么保存的数据 ?