Multithreading 螺纹端接
我正在开发一种多线程的下载管理器。 每个线程都有自己的ID/句柄/URL/等 我想实现暂停/恢复/取消下载之类的功能。 我将线程句柄存储在listview中,以便挂起/恢复/终止下载线程。我还没有尝试挂起/恢复,因为我目前正在处理取消下载。唯一的问题是,如果我挂起一个线程,FileHandles/DLHandles不会关闭。 因为手柄叠在螺纹中。是否有可能获取我传递给CreateThread的指针 如何创建线程Multithreading 螺纹端接,multithreading,winapi,memory,pointers,Multithreading,Winapi,Memory,Pointers,我正在开发一种多线程的下载管理器。 每个线程都有自己的ID/句柄/URL/等 我想实现暂停/恢复/取消下载之类的功能。 我将线程句柄存储在listview中,以便挂起/恢复/终止下载线程。我还没有尝试挂起/恢复,因为我目前正在处理取消下载。唯一的问题是,如果我挂起一个线程,FileHandles/DLHandles不会关闭。 因为手柄叠在螺纹中。是否有可能获取我传递给CreateThread的指针 如何创建线程 type PTR_Download = ^TTDownload; TTDownl
type
PTR_Download = ^TTDownload;
TTDownload = record
URL: string;
ThreadHandle : Longword;
// .....
end;
function DownloadFile ( p : pointer ) : Integer; stdcall; // The Thread
var
_infos: TTDownload;
begin
CopyMemory(@_infos, p, SizeOf(_infos));
DownloadFile (_infos.URL); // just example
// .... and so on
// .... Handles get created here FileHandle/InternetOpenHandle/etc..
end;
function StartNewDownload (Link : String)
var
DL : PTR_Download;
ThreadID : DWORD;
begin
DL := PTR_Download(LocalAlloc(LPTR, SizeOf(TTDownload)));
DL^.URL := Link;
DL.ThreadHandle := CreateThread(nil, 0, @DownloadFile, DL, 0, ThreadID);
end;
function AnotherFunction (dummy : String) : Bool;
begin
GetParameterPointerOfThreadHandle (AnyHandleHere) // Something like that?!
end;
我基本上只需要关闭终止线程的打开句柄。
有什么想法吗?请为您正在使用的语言添加一个标记。看起来像旧的非OO Pascal-Delphi,去掉了所有好东西:您是否支持异常-如果您从另一个线程关闭打开的HTTP客户端套接字句柄,会发生什么?如果它已经关闭了怎么办?我无法关闭另一个线程的句柄,因为它们的句柄堆积在线程中。如果线程终止,所有句柄都将消失…如果要停止下载,则必须保存。。使线程/套接字/任何可访问的东西。在OO语言中,DL是一个类,保存在列表或向量中。您需要对DL-ponter执行类似的操作—将其保存在动态数组中,或者类似的操作。如果您想稍后引用DL以阻止它们,则不能触发并忘记DL。