2010-12-03 37 views

回答

4

Delphi XE中有一個TThread.CreateAnonymousThread,它允許簡單執行後臺任務。

一個不重要的演示:

TThread.CreateAnonymousThread(
    procedure begin 
    Sleep(10000); // replace with a real workload 
    end 
).Start; 
7

發佈本身最小。在Delphi 2009中,他們在TThread.Synchronize中增加了對匿名方法的支持,在XE中,他們添加了一個線程通信隊列Generics.Collections

但社區貢獻了一些有趣的東西。例如,檢查出OmniThreadLibrary

0

即使有代碼在多線程中運行,目前沒有multicores cpu。鎖定和解鎖問題在這裏是爲什麼

  1. 內存管理器。它比以往
  2. 字符串更好的是引用計數
  3. 接口引用計數

歡呼

+0

「目前還沒有多核CPU」 - 你是說如果我創建線程,他們*全部*運行在一個核心上? – RobertFrank 2010-12-03 23:06:48

+2

它們可以在所有內核上運行,但是如果有鎖代碼被調用/使用,它可以在mem總線上斷言,這會導致其他cpus /內核在調用期間停止。假設你有一個四核CPU和四個線程在每個核心上運行。當發生鎖定時,所有其他的cpus/cores必須暫停。這裏是你的閱讀:http://software.intel.com/en-us/articles/implementing-scalable-atomic-locks-for-multi-core-intel-em64t-and-ia32-architectures/ – APZ28 2010-12-04 01:25:25

4

IMO最強大的,並介紹了最不爲人所知的多線程功能後,德爾福7是TThread.Queue方法。例如,而不是

Synchronize(
    procedure 
    begin 
    Form1.Memo1.Lines.Add(‘Begin Execution’); 
    end); 

可以使用

Queue(
    procedure 
    begin 
    Form1.Memo1.Lines.Add(‘Begin Execution’); 
    end); 

TThread.QueueTThread.Synchronize的替代方案,允許工作線程繼續,而無需等待(與同步調用工作線程等待,直到主線程結束執行同步代碼) - 一個非常好的功能,可用作PostMessage的定製消息處理的替代品。

1

自2010年或XE線程可以被命名,雖然這僅僅是在調試器中可見(不是如Sysinternals的東西一樣procesxp)