【发布时间】:2012-09-18 10:43:05
【问题描述】:
我需要在 Delphi 中启动一个线程并为此使用以下代码:
function ThreadFunc(tp: PThreadParams): Integer;
var
I: Integer;
begin
OutputDebugString(PChar('ThreadFunc, 1'));
for I := 0 to 10000 do
begin
if (I MOD 100) = 0 then
begin
OutputDebugString(PChar('Sample Delphi DLL ' + IntToStr(I)));
end;
end;
Dispose(tp);
end;
procedure RunThread;
var
tp : PThreadParams;
Thread : THandle;
ThreadID : Cardinal;
ExitCode : Cardinal;
begin
New(tp);
OutputDebugString(PChar('RunThread, 1'));
Thread := BeginThread(nil, 0, @ThreadFunc, tp, 0, ThreadID);
OutputDebugString(PChar('RunThread, 2. ThreadID: ' + IntToStr(ThreadID)));
WaitForSingleObject(Thread, INFINITE);
GetExitCodeThread(Thread, ExitCode);
CloseHandle(Thread);
end;
当我运行 RunThread 时,日志文件包含条目
运行线程,1
RunThread, 2. ThreadID: ...
但ThreadFunc 没有日志输出。
我应该如何更改此代码以执行实际的线程函数 (ThreadFunc)?
【问题讨论】:
-
为什么不使用 TThread?实现线程非常容易。
-
它是否在“无头”(无 GUI)环境中工作?我需要在 DLL 中启动线程。
-
GolezTrol +1。是的,它确实。如果您想尝试修复您的示例,请尝试对线程函数使用 stdcall 调用约定。
-
是的,有人想知道为什么你不只使用
TThread。 -
@GolezTrol 是的,它确实有效,谢谢。请提交此声明作为答案,然后我会将问题标记为已回答。
标签: multithreading delphi delphi-2009