Multithreading 为什么在Mac OS上等待TThread需要100毫秒?
我在应用程序中看到,我运行的每个线程都需要大约100毫秒的时间才能完成,即使线程本身没有什么事情可做 请参见此示例:Multithreading 为什么在Mac OS上等待TThread需要100毫秒?,multithreading,macos,macos-sierra,freepascal,Multithreading,Macos,Macos Sierra,Freepascal,我在应用程序中看到,我运行的每个线程都需要大约100毫秒的时间才能完成,即使线程本身没有什么事情可做 请参见此示例: 程序线程测试; 使用 cThreads、SysUtils、类; 类型 TSampleThread=class(TThread) 受保护的 程序执行;推翻 结束; 变量 线程:TThread; I:整数; 程序TSampleThread.Execute; 开始 //没什么 结束; 开始 WriteLn(TimeToStr(Now)+“Start”); 对于I:=0到99 do 开始
程序线程测试;
使用
cThreads、SysUtils、类;
类型
TSampleThread=class(TThread)
受保护的
程序执行;推翻
结束;
变量
线程:TThread;
I:整数;
程序TSampleThread.Execute;
开始
//没什么
结束;
开始
WriteLn(TimeToStr(Now)+“Start”);
对于I:=0到99 do
开始
线程:=TSampleThread.Create(True);
//Thread.Start;//我们不需要启动线程。
线程自由;//这个电话大约需要100毫秒
结束;
WriteLn(TimeToStr(Now)+“Finished”);
结束。
输出是
23:08:17 Start
23:08:28 Finished
正如您所见,循环大约需要10秒才能完成。对Free
的调用(分别是对WaitFor
的内部调用)需要超过100ms的时间
我在Windows上看不到这个问题。为什么这会发生在Mac OS上?我怎样才能做得更快呢?您似乎假设1个滴答声等于1毫秒,对吗@谢谢你指出这一点。我更改了示例代码,因此它根本不使用
GetTickCount
。您如何知道它是Thread.Free()
花费时间而不是Thread.Create()
?查看WaitFor
方法的源代码。可能,您会发现类似于未完成do CheckSynchronize(100)时的代码>那里。。。