ほぼ完成したアプリができました。次に実装したい機能はスレッド化です。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);
少量の情報から、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;
数人の人が提案し、以下のRobが示すように、TThreadを使用する場合、a)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;
しかし、私は完全にマークから外れているこのしつこい感じを持っています。