c++ builder XE4, 10.2 Tokyo | TThread > 스레드 이름을 코드로 붙인다 > SetThreadName(L"ThreadTest_tpNormal", threadID);
C++ Builder XE4 on Windows 7 pro
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
ぃ tp // 이 m / 7 ~ f9 / ms / b 8f229862c5b868699
계속.
TThread 의 Execute() 에 있어서 이하의 처리를 하면 thread의 이름이 붙는 것을 발견했다.
(추기 2016/03/06)
SetThreadName()
는 Indy10에서 제공되는 함수와 같습니다. IdGlobal.pas
에 포함된다.이 함수를 사용하는 경우, Indy10 관련의 헤더 인클루드가 필요하게 된다. Indy10 관련을 include하면 장래의 이식시에 문제가 나올 것 같다.
그래도 사용하는 경우는, Code Complete의 「Identify Areas Likely to Change」에 근거해, 장래 변경하는 부분을 식별하기 쉽게 해 두는 것이 바람직하다.
#include <IdGlobal.hpp>
...
DWORD tid = GetCurrentThreadId();
SetThreadName(L"ThreadMain", tid);
스레드의 상태는 다음과 같습니다.
IDE의 "명명 된 스레드"기능을 솔직하게 사용하는 것이 편할지도 모르지만, 이전에 "이름 없음"스레드에서 "명명 된"스레드로 변환하려고 시도하는 "매달린"경험이 있으므로 위와 같은 방법 하고있다.
v0.2
thread의 우선도도 기재하면 다른 thread와의 관계성이 명확하게 되어 디버그하기 쉬워진다.
#include <IdGlobal.hpp>
...
DWORD tid = GetCurrentThreadId();
SetThreadName(L"ThreadMain_tpNormal", tid);
v0.3
this->Priority로부터 thread의 우선도를 자동 부가하는 코드를 추가.
static String getThreadPriorityString(TThreadPriority priority)
{
switch(priority) {
case tpHigher:
return L"_Higher";
case tpNormal:
return L"_tpNormal";
case tpLower:
return L"_tpLower";
case tpLowest:
return L"_tpLowest";
case tpIdle:
return L"_tpIdle";
default:
return L"_tpOther";
}
}
다음과 같이 사용한다.
#include <IdGlobal.hpp>
...
void __fastcall TThreadMain::Execute()
{
// スレッド名の表示
DWORD tid = GetCurrentThreadId();
String thrnam = L"ThreadMain" + getThreadPriorityString(this->Priority);
SetThreadName(thrnam, tid);
v0.4
UtilDebugThreadInfo.cpp, .h라는 파일로 스레드 명 부가 처리를 옮겼다.
클래스의 static 함수로 구현.
각각의 TThread에서는 다음과 같이 사용한다.
#include <UtilDebugThreadInfo.h>
...
void __fastcall TThreadMain::Execute()
{
CUtilDebugThreadInfo::SetDebugInfoThreadName(this->Priority, L"ThreadMain");
...
TForm의 경우 Priority라는 속성이 없었기 때문에 FormShow에서 다음과 같이 한다.
tpNormal은 임의의 값입니다.
폼으로 하면, 여러가지 폼을 Show할 때마다, 1개의 thread의 이름이 무렵 바뀌는 것 같다.
CUtilDebugThreadInfo::SetDebugInfoThreadName(tpNormal, L"TMainForm");
UtilDebugThreadInfo.cpp에 정리해 두는 것으로, 장래의 이식시에 Indy10의 함수 시그니쳐가 변화하거나, Indy10을 사용하지 않게 되었을 경우에도 이 파일의 수정으로 끝난다.
「Identify Areas Likely to Change.」라고 하는 변경(해야 할) 개소의 identify도 하기 쉬워야 한다.
Reference
이 문제에 관하여(c++ builder XE4, 10.2 Tokyo | TThread > 스레드 이름을 코드로 붙인다 > SetThreadName(L"ThreadTest_tpNormal", threadID);), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/01f1daa918b3911444c0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)