Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 为什么在Mac OS上等待TThread需要100毫秒?_Multithreading_Macos_Macos Sierra_Freepascal - Fatal编程技术网

Multithreading 为什么在Mac OS上等待TThread需要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 开始

我在应用程序中看到,我运行的每个线程都需要大约100毫秒的时间才能完成,即使线程本身没有什么事情可做

请参见此示例:

程序线程测试;
使用
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)时的
那里。。。