gpt4 book ai didi

c# - 在 Azure 辅助角色中使用 kernel32 CreateThread/TerminateThread

转载 作者:行者123 更新时间:2023-12-02 08:10:26 25 4
gpt4 key购买 nike

我有这个代码需要使用,但阻碍我的是 here它说 TerminateThread 适用于:仅桌面应用程序。我想知道是否可以在 azure Worker 角色中使用此代码,特别是在我用来运行 Worker 线程的 waiishost.exe 进程中?

[DllImport("Library.dll")]
public static extern void InfiniteLoop();

[DllImport("kernel32")]
private static extern int CreateThread(
IntPtr lpThreadAttributes,
UInt32 dwStackSize,
IntPtr lpStartAddress,
IntPtr param,
UInt32 dwCreationFlags,
UInt32 lpThreadId
);

[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
public static extern int TerminateThread(int hThread);

[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetLastError();

private delegate int InvokeInfiniteLoop(IntPtr args);

static void Main(string[] args)
{
InvokeInfiniteLoop invokeInfiniteLoop = (args1) =>
{
InfiniteLoop();
return 0;
};
IntPtr infiniteLoopPtr = Marshal.GetFunctionPointerForDelegate(invokeInfiniteLoop);
int handle = CreateThread(IntPtr.Zero, 0, infiniteLoopPtr, IntPtr.Zero, 0, 0);
Thread.Sleep(TimeSpan.FromSeconds(5));
int terminated = TerminateThread(handle);
Console.WriteLine(terminated);
}

编辑:

经过进一步的研究,看起来(正如我从一开始就怀疑的那样)这个解决方法是完全错误的。创建和终止非托管代码将泄漏堆栈。我将必须创建一个单独的可执行文件,该可执行文件将由 Process.Kill();

最佳答案

“仅适用于桌面应用程序”是指 Windows 8 桌面应用程序和 Windows 8 Metro 应用程序之间的区别。

关于c# - 在 Azure 辅助角色中使用 kernel32 CreateThread/TerminateThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12043408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com