(1)创建线程 --- 单文档
HWND hHwnd =GetSafeHwnd();
HANDLE hConnectDevice;//连接设备与接收设备数据的线程
DWORDthreadIDConDev;
hConnectDevice =CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0,
(LPTHREAD_START_ROUTINE)ThreadConnectDevice,(LPVOID)this,0, &threadIDConDev);
SetThreadPriority(hConnectDevice,THREAD_PRIORITY_HIGHEST); //存波形设置最高优先级
HANDLE hSaveData;//保存数据线程
DWORDthreadIDSaveData;
hSaveData =CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0,
(LPTHREAD_START_ROUTINE)ThreadSaveData,(LPVOID)hHwnd,0, &threadIDSaveData);//将hHwnd作为参数传递给线程
SetThreadPriority(hSaveData,THREAD_PRIORITY_LOWEST); //存波形设置最低优先级
(2)线程函数实现
DWORD WINAPIThreadConnectDevice(LPVOID wParam)
{
while(1)
{
Sleep(200);
}
return0;
}
DWORD WINAPIThreadSaveData(LPVOID wParam)
{
CFileUtils fileUtils;
CString strFileName;
SYSTEMTIME st;
DWORD dwRet = 0;
while(1
{
dwRet = WaitForSingleObject(hEventSave,100);
if(dwRet == WAIT_OBJECT_0)
{
ResetEvent(hEventSave);
HWND hHwnd =(HWND)wParam;
::PostMessage(hHwnd,WM_DRAWMYDATA,0,NULL);//向主线程抛消息,主线程相应该消息
}
else
{
ResetEvent(hEventSave);
}
}
return0;
}
(3)信号量操作
HANDLE hEventSave;//信号量定义
hEventSave =CreateEvent(NULL,TRUE,FALSE,NULL);//信号量创建
SetEvent(hEventDrawData);//抛信号量
dwRet =WaitForSingleObject (hEventSave,100);//等待信号量
ResetEvent(hEventSave);//信号量复位
(4)抛消息
1)线程函数中添加:
HWND hHwnd =(HWND)wParam;// wParam为创建线程时从主线程传递过来的。
::PostMessage(hHwnd,WM_DRAWMYDATA,0,NULL);
2).h中添加
#define WM_DRAWMYDATA WM_USER + 100
public:
afx_msg LRESULT OnDrawMyData(WPARAMwParam,LPARAM lParam);
3).cpp中添加:
BEGIN_MESSAGE_MAP(CIFMDataProcessView,CView) ON_MESSAGE(WM_DRAWMYDATA,&CIFMDataProcessView::OnDrawMyData)//
END_MESSAGE_MAP()
LRESULTCIFMDataProcessView::OnDrawMyData(WPARAM wParam,LPARAM lParam)
{
returnTRUE;
}