【发布时间】:2016-11-17 22:11:37
【问题描述】:
在 windows 上,我们可以在同一个线程上多次调用 MyThread.waitfor。如果线程已经终止没问题,这不会引发任何异常并立即返回(正常行为)。
在 Android 上,情况有所不同,如果我们调用两次 MyThread.waitfor,那么我们将在第二次尝试时出现“No such process”异常。
function TThread.WaitFor: LongWord;
{$ELSEIF Defined(POSIX)}
var
X: Pointer;
ID: pthread_t;
begin
if FExternalThread then
raise EThread.CreateRes(@SThreadExternalWait);
ID := pthread_t(FThreadID);
if CurrentThread.ThreadID = MainThreadID then
while not FFinished do
CheckSynchronize(1000);
FThreadID := 0;
X := @Result;
CheckThreadError(pthread_join(ID, X));
end;
{$ENDIF POSIX}
错误是因为在调用时等待他们设置 FThreadID := 0 所以当然任何进一步的调用都会失败
我认为它必须写成:
function TThread.WaitFor: LongWord;
{$ELSEIF Defined(POSIX)}
begin
if FThreadID = 0 then exit;
...
end;
{$ENDIF POSIX}
你觉得呢?我需要在 emb 提出错误请求吗?
【问题讨论】:
标签: android delphi firemonkey