rt
希望能举个例子说明一下,谢谢
希望能举个例子说明一下,谢谢
解决方案 »
- 想把返回的值写到数组里,然后调用一个处理函数
- 主管的批评,我不是很服,请大家讨论一下
- 新手请教关于delphi中ADO组件实现数据的分页显示。
- 请教如何用点列表在Tcanvas中绘制比较圆滑的区域(非常急!)
- 紧急求助之三:请帮忙翻译(从VC++到Delphi)?
- 浙江大华DVR用SDK 进行回调函数抓图
- 谁有字符串通配符匹配的算法(例如*.txt可以匹配a.txt和b.txt)?
- 请问reportbuilder中如何控制换页
- 知道进程ID,怎么结束进程?
- 如何得到excel中的行数,我想把excel数据转换成access?
- 共享内存(CreateFileMapping,OpenFileMapping) 如何传递 结果集?
- 一方有难,八方支援啊!
{$IFDEF LINUX}
var
ErrCode: Integer;
{$ENDIF}
begin
inherited Create;
AddThread;
FSuspended := CreateSuspended;
FCreateSuspended := CreateSuspended;
{$IFDEF MSWINDOWS}
FHandle := BeginThread(nil, 0, @ThreadProc, Pointer(Self), CREATE_SUSPENDED, FThreadID);
if FHandle = 0 then
raise EThread.CreateResFmt(@SThreadCreateError, [SysErrorMessage(GetLastError)]);
{$ENDIF}
{$IFDEF LINUX}
sem_init(FCreateSuspendedSem, False, 0);
ErrCode := BeginThread(nil, @ThreadProc, Pointer(Self), FThreadID);
if ErrCode <> 0 then
raise EThread.CreateResFmt(@SThreadCreateError, [SysErrorMessage(ErrCode)]);
{$ENDIF}
end;
里面创建线程是用的 BeginThread 函数,在看看它的代码:
{$IFDEF MSWINDOWS}
function BeginThread(SecurityAttributes: Pointer; StackSize: LongWord;
ThreadFunc: TThreadFunc; Parameter: Pointer; CreationFlags: LongWord;
var ThreadId: LongWord): Integer;
var
P: PThreadRec;
begin
New(P);
P.Func := ThreadFunc;
P.Parameter := Parameter;
IsMultiThread := TRUE;
Result := CreateThread(SecurityAttributes, StackSize, @ThreadWrapper, P,
CreationFlags, ThreadID);
end;
procedure EndThread(ExitCode: Integer);
begin
ExitThread(ExitCode);
end;
{$ENDIF}{$IFDEF LINUX}
function BeginThread(Attribute: PThreadAttr;
ThreadFunc: TThreadFunc;
Parameter: Pointer;
var ThreadId: Cardinal): Integer;
var
P: PThreadRec;
begin
if Assigned(BeginThreadProc) then
Result := BeginThreadProc(Attribute, ThreadFunc, Parameter, ThreadId)
else
begin
New(P);
P.Func := ThreadFunc;
P.Parameter := Parameter;
IsMultiThread := True;
Result := _pthread_create(ThreadID, Attribute, @ThreadWrapper, P);
end;
end;procedure EndThread(ExitCode: Integer);
begin
if Assigned(EndThreadProc) then
EndThreadProc(ExitCode);
// No "else" required since EndThreadProc does not (!!should not!!) return.
_pthread_detach(GetCurrentThreadID);
_pthread_exit(ExitCode);
end;
{$ENDIF}从上面的代码看, BeginThread/EndThread 两个函数是跨平台的。而 CreateThread/ExitThread 仅是 Widnows 下的。这下,能明白点了吧