我已經有一個幾乎完成的應用程序,我想實現的下一個功能是線程化。我選擇了BeginThread(),儘管我知道delphi中的TThread。我遇到的問題是BeginThread()調用的結構。通常在該會打電話我希望能夠擰功能的程序。該行是BeginThread結構 - 德爾福
CompareFiles(form1.Edit3.Text,Form1.Edit4.Text,Form1.StringGrid2,op);
op是一個整數。
我已經關掉它用於創建一個線程是
BeginThread(nil,0,CompareFiles,Addr('form1.Edit3.Text,Form1.Edit4.Text,Form1.StringGrid2,op'),0,x);
從infromation的少量我可以找到關於如何實際使用BeginThread()這應該是罰款呼叫的線路,但是在編譯我所得到的是關於我的BeginThread()語句參數結構的編譯器錯誤。
編輯信息。
調用CompareFiles目前的程序是
procedure TForm1.Panel29Click(Sender: TObject);
var
op,x : integer;
begin
if (Form1.Edit3.Text <> '') AND (Form1.Edit4.Text <> '') then
begin
op := 3;
if RadioButton7.Checked = True then op := 0;
if RadioButton3.Checked = True then op := 1;
if RadioButton4.Checked = True then op := 2;
if RadioButton5.Checked = True then op := 3;
if RadioButton6.Checked = True then op := 4;
CompareFiles(form1.Edit3.Text,Form1.Edit4.Text,Form1.StringGrid2,op);
end;
end;
如果我是使用的TThread由幾個人的建議,並通過以下羅布所顯示的,我在如何),我會通過困惑op,Edit3/4.Text和StringGrid2添加到CompareFiles中。從我所看到的TThread的例子猜我以爲我會TCompareFilesThread.Execute
替換上面的代碼和把從Panel29Click當前代碼到TCompareFilesThread.Create
然後添加
FEdit3Text := Edit3Text;
FEdit4Text := Edit4Text;
FGrid := Grid;
這個
FEdit3Text := Form1.Edit3.Text;
FEdit4Text := Form1.Edit4.Text;
FGrid := Form1.StringGrid2;
但我有這種嘮叨的感覺,完全不合格。
「關於事物不匹配的投訴」不是一個非常有用的描述。你能編輯你的問題,並粘貼錯誤信息的副本嗎? – 2011-01-25 01:23:31
我也很好奇你爲什麼選擇*不使用TThread?在沒有好的對象封裝的情況下使用全局線程函數會極大地使與併發和競爭條件相關的事情複雜化。我也很好奇你爲什麼即將完成應用程序,然後決定添加線程。國際海事組織,應該從一開始就考慮線程,而不是事後考慮。如果不及早考慮地雷的話,穿線地雷的可能性很大。 – 2011-01-25 01:28:43