线程创建和关闭以及挂起
2012-03-27 08:55
211 查看
下面这个是线程的终止操作:
//DWORD id;
//GetExitCodeThread(hHidThread,&id);
//TerminateThread(hHidThread,id);
//hHidThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CHid::ThreadFunc, m_pHid, 0, NULL);
//CloseHandle(hHidThread);
//hHidThread=NULL;
然后创建线程是:
hHidThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CHid::ThreadFuncSourceData, m_pHid, 0, NULL);
还有就是:
static int flag = 1;
if(flag)
{
SuspendThread(hHidThread);
flag = 0;
}
else
{
ResumeThread(hHidThread);
flag = 1;
}
这种写法很好的利用了static的性质,从而有效的起到了开关作用。
unsigned char buf[512] = {0}; //数据缓冲区
CHid *phid = (CHid *)lpara; //hid设备指针
DWORD DataLen = phid->m_pDlg->m_uSensorNum * phid->m_pDlg->m_uDriverNum * 2;//定义DataLen长度
while(1)
{
phid->ReadHid(buf, 64); //读Hid函数
phid->m_pDlg->m_CriticalSection.Lock(); //加临界锁
for(DWORD i = 0, k = 0; i < DataLen; i += 2, k++ )
{
g_DataBuf[k]=(short)((buf[i]<<8) +buf[i+1]); //guitar大小端与PC相反
}
phid->m_pDlg->m_CriticalSection.Unlock(); //解锁
PostMessage(phid->m_pDlg->m_hWnd,WM_MY_UPDATEDATA,0,0); //发送更新显示消息
Sleep(10);
}
return 0;
上面用到了临界锁,暂时还不是很懂,后面再看吧。
//DWORD id;
//GetExitCodeThread(hHidThread,&id);
//TerminateThread(hHidThread,id);
//hHidThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CHid::ThreadFunc, m_pHid, 0, NULL);
//CloseHandle(hHidThread);
//hHidThread=NULL;
然后创建线程是:
hHidThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CHid::ThreadFuncSourceData, m_pHid, 0, NULL);
还有就是:
static int flag = 1;
if(flag)
{
SuspendThread(hHidThread);
flag = 0;
}
else
{
ResumeThread(hHidThread);
flag = 1;
}
这种写法很好的利用了static的性质,从而有效的起到了开关作用。
unsigned char buf[512] = {0}; //数据缓冲区
CHid *phid = (CHid *)lpara; //hid设备指针
DWORD DataLen = phid->m_pDlg->m_uSensorNum * phid->m_pDlg->m_uDriverNum * 2;//定义DataLen长度
while(1)
{
phid->ReadHid(buf, 64); //读Hid函数
phid->m_pDlg->m_CriticalSection.Lock(); //加临界锁
for(DWORD i = 0, k = 0; i < DataLen; i += 2, k++ )
{
g_DataBuf[k]=(short)((buf[i]<<8) +buf[i+1]); //guitar大小端与PC相反
}
phid->m_pDlg->m_CriticalSection.Unlock(); //解锁
PostMessage(phid->m_pDlg->m_hWnd,WM_MY_UPDATEDATA,0,0); //发送更新显示消息
Sleep(10);
}
return 0;
上面用到了临界锁,暂时还不是很懂,后面再看吧。
相关文章推荐
- Callable,Runnable比较及用法以及创建线程的4种方法
- 线程的创建 以及 线程的各种状态
- Android平台中进程与线程以及关闭进程的一些方法
- java创建线程的三种方式以及比较
- vc 线程创建关闭(彻底讲解)
- 创建线程后为什么马上调用CloseHandle()来关闭句柄
- MFC-创建,挂起,恢复线程
- vc 线程创建关闭
- 线程的创建、等待、终止以及属性
- Android 之 子线程中创建子线程以及子线程中toast 问题
- 黑马程序员--创建线程的两种方式、步骤以及代码体现
- delphi线程的创建、挂起、激活与终止
- Python多线程编程(2): 线程的创建、启动、挂起和退出
- Java中创建线程的几种方式以及线程同步的几种方式
- QT创建线程的窗口关闭,但是线程还在运行
- C#中创建线程的方式,以及主线程和子线程之间的资源调用
- Java多线程基础,线程的创建使用以及终止
- java多线程2(线程的创建方式以及启动)
- python多线程编程(2): 线程的创建、启动、挂起和退出
- 在挂起的进程中创建一个远程线程