厦门莫格电气自动化有限公司销售
Honeywell霍尼韦尔620-0086
您迈开询价的一小步,我还您成功的一大步。
620-0086
620-0086
620-0086
注册操作一般直接跟在线程创建之后,其代码如下:
DWORD dwThreadID = 0;
TCHAR sThreadName[] = L” ReceiveThread”; // 注意32个字符!
// create rx thread
m_hRxThread = CreateThread((LPSECURITY_ATTRIBUTES)NULL,
0,
(LPTHREAD_START_ROUTINE)ReceiveThread,
(LPVOID)pPara,
0,
&dwThreadID);
RegisterThreadName(dwThreadID, sThreadName);
线程名注销操作则更简单,直接放在线程退出之前即可。
以下是AppHelper提供的这两个API函数的具体实现,该代码应包含在应用程序之中。
struct _THREAD_INDEX
{
DWORD dwSize; // struct size in byte
DWORD dwThreadID; // a thread id
TCHAR szThreadName[32]; // user-defined name associated with the
// thread id above
struct _THREAD_INDEX *pNext; // = NULL
};
typedef struct _THREAD_INDEX THREAD_INDEX, *PTHREAD_INDEX;
BOOL RegisterThreadName(DWORD dwThreadID, TCHAR* sThreadName)
{
BOOL bRet = TRUE;
THREAD_INDEX ThreadNode;
PTHREAD_INDEX pNode = &ThreadNode;
DWORD dwLen;
HANDLE hDevFile = NULL;
memset(&ThreadNode, 0, sizeof(THREAD_INDEX));
pNode->dwSize = sizeof(THREAD_INDEX);
dwLen = wcslen(sThreadName);
if(!dwThreadID || (dwLen >= 32))
{
bRet = FALSE;
goto cleanup;
}
pNode->dwThreadID = dwThreadID;
wcscpy(pNode->szThreadName, sThreadName);
hDevFile = CreateFile(L"HLP1:", // name of device
GENERIC_READ|GENERIC_WRITE, // desired access
0, // sharing mode
NULL, // security attributes
OPEN_EXISTING, // creation disposition
0, // flags/attributes
NULL); // template file
if(hDevFile == INVALID_HANDLE_VALUE)
{
hDevFile = NULL;
bRet = FALSE;
goto cleanup;
}
dwLen = 0;
if(!WriteFile(hDevFile, pNode, sizeof(THREAD_INDEX), &dwLen, NULL))
{
bRet = FALSE;
}
CloseHandle(hDevFile);
cleanup:
return bRet;
}
BOOL UnRegisterThreadName(DWORD dwThreadID)
{
BOOL bRet = TRUE;
THREAD_INDEX ThreadNode;
PTHREAD_INDEX pNode = &ThreadNode;
DWORD dwLen;
HANDLE hDevFile = NULL;
memset(&ThreadNode, 0, sizeof(THREAD_INDEX));
pNode->dwSize = sizeof(THREAD_INDEX);
if(!dwThreadID)
{
bRet = FALSE;
goto cleanup;
}
pNode->dwThreadID = dwThreadID;
hDevFile = CreateFile(L"HLP1:", // name of device
GENERIC_READ|GENERIC_WRITE, // desired access
0, // sharing mode
NULL, // security attributes
OPEN_EXISTING, // creation disposition
0, // flags/attributes
NULL); // template file
if(hDevFile == INVALID_HANDLE_VALUE)
{
hDevFile = NULL;
bRet = FALSE;
goto cleanup;
}
dwLen = 0;
if(!WriteFile(hDevFile, pNode, sizeof(THREAD_INDEX), &dwLen, NULL))
{
bRet = FALSE;
}
CloseHandle(hDevFile);
cleanup:
return bRet;