Implement named threads on Windows
This commit is contained in:
parent
a209539060
commit
8e80cee144
2 changed files with 17 additions and 7 deletions
|
|
@ -32,6 +32,7 @@ pub type DWORD = c_ulong;
|
|||
pub type HANDLE = LPVOID;
|
||||
pub type HINSTANCE = HANDLE;
|
||||
pub type HMODULE = HINSTANCE;
|
||||
pub type HRESULT = LONG;
|
||||
pub type BOOL = c_int;
|
||||
pub type BYTE = u8;
|
||||
pub type BOOLEAN = BYTE;
|
||||
|
|
@ -197,6 +198,8 @@ pub const ERROR_OPERATION_ABORTED: DWORD = 995;
|
|||
pub const ERROR_IO_PENDING: DWORD = 997;
|
||||
pub const ERROR_TIMEOUT: DWORD = 0x5B4;
|
||||
|
||||
pub const E_NOTIMPL: HRESULT = 0x80004001u32 as HRESULT;
|
||||
|
||||
pub const INVALID_HANDLE_VALUE: HANDLE = !0 as HANDLE;
|
||||
|
||||
pub const FACILITY_NT_BIT: DWORD = 0x1000_0000;
|
||||
|
|
@ -1163,8 +1166,8 @@ extern "system" {
|
|||
timeout: *const timeval) -> c_int;
|
||||
}
|
||||
|
||||
// Functions that aren't available on Windows XP, but we still use them and just
|
||||
// provide some form of a fallback implementation.
|
||||
// Functions that aren't available on every version of Windows that we support,
|
||||
// but we still use them and just provide some form of a fallback implementation.
|
||||
compat_fn! {
|
||||
kernel32:
|
||||
|
||||
|
|
@ -1182,6 +1185,10 @@ compat_fn! {
|
|||
pub fn SetThreadStackGuarantee(_size: *mut c_ulong) -> BOOL {
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED as DWORD); 0
|
||||
}
|
||||
pub fn SetThreadDescription(hThread: HANDLE,
|
||||
lpThreadDescription: LPCWSTR) -> HRESULT {
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED as DWORD); E_NOTIMPL
|
||||
}
|
||||
pub fn SetFileInformationByHandle(_hFile: HANDLE,
|
||||
_FileInformationClass: FILE_INFO_BY_HANDLE_CLASS,
|
||||
_lpFileInformation: LPVOID,
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ use sys::handle::Handle;
|
|||
use sys_common::thread::*;
|
||||
use time::Duration;
|
||||
|
||||
use super::to_u16s;
|
||||
|
||||
pub struct Thread {
|
||||
handle: Handle
|
||||
}
|
||||
|
|
@ -53,11 +55,12 @@ impl Thread {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn set_name(_name: &CStr) {
|
||||
// Windows threads are nameless
|
||||
// The names in MSVC debugger are obtained using a "magic" exception,
|
||||
// which requires a use of MS C++ extensions.
|
||||
// See https://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx
|
||||
pub fn set_name(name: &CStr) {
|
||||
if let Ok(utf8) = name.to_str() {
|
||||
if let Ok(utf16) = to_u16s(utf8) {
|
||||
unsafe { c::SetThreadDescription(c::GetCurrentThread(), utf16.as_ptr()); };
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
pub fn join(self) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue