线程OnTerminate

时间:2012-04-21 08:45:18

标签: multithreading winapi memory pointers

我正在开发一种多线程的下载管理器。 每个线程都有自己的ID /句柄/ URL /等。

我想实现Pause / Resume / Cancel下载之类的东西。 我将ThreadHandles存储在listview中,因此我可以暂停/恢复/终止下载线程。我还没有尝试暂停/恢复,因为我正在努力取消下载。唯一的问题是如果我挂起一个线程,FileHandles / DLHandles就不会被关闭。 由于把手堆叠在螺纹中。是否有可能获得我为CreateThread传递的指针?

我如何创建线程

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;

我基本上只需要关闭已终止线程的打开句柄。 任何想法?

0 个答案:

没有答案