Ahora tengo una aplicación casi completa y la siguiente característica que quiero implementar es el enhebrado. Elegí ir con BeginThread(), aunque estoy al tanto de TThread en Delphi. El problema con el que me estoy cruzando es la estructura de la llamada BeginThread(). Normalmente, la línea en el programa que llamaría a la función que quiero enhebrar esBeginThread Structure - Delphi
CompareFiles(form1.Edit3.Text,Form1.Edit4.Text,Form1.StringGrid2,op);
op es un número entero.
La línea he cambiado hacia fuera para crear un hilo de ella es
BeginThread(nil,0,CompareFiles,Addr('form1.Edit3.Text,Form1.Edit4.Text,Form1.StringGrid2,op'),0,x);
Desde la pequeña cantidad de infromation que puedo encontrar en la forma de utilizar realmente BeginThread() esto debe ser una multa de llamadas , sin embargo, al compilar, todo lo que obtengo son errores de compilador con respecto a la estructura de mis parámetros de enunciados BeginThread().
EDITAR PARA OBTENER INFORMACIÓN.
El procedimiento actual que llama CompareFiles es
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;
Si tuviera que utilizar TThread según lo sugerido por un par de personas, y como se muestra a continuación por Rob, estoy confundido cómo a) me lo pase op, Edit3/4.Text y StringGrid2 a CompareFiles. Adivinando el ejemplo de TThread que he visto pensé que iba a reemplazar el código anterior con el TCompareFilesThread.Execute
y poner el código actual de Panel29Click en TCompareFilesThread.Create
y luego añadir
FEdit3Text := Edit3Text;
FEdit4Text := Edit4Text;
FGrid := Grid;
a este
FEdit3Text := Form1.Edit3.Text;
FEdit4Text := Form1.Edit4.Text;
FGrid := Form1.StringGrid2;
Pero Tengo esta sensación molesta que está totalmente fuera de lugar.
"Quejas sobre cosas que no coinciden" no es una descripción muy útil. ¿Podría editar su pregunta y pegar una copia del mensaje de error en por favor? –
También me pregunto por qué elige * no * usar TThread? El uso de funciones de subprocesos globales sin una buena encapsulación de objetos complica enormemente las cosas relacionadas con la concurrencia y las condiciones de carrera. También me llama la atención por qué está a punto de completar la aplicación y luego decidí agregarla. OMI, el enhebrado debe considerarse desde el principio y no en el último momento. Existe una alta probabilidad de enhebrar minas terrestres si no se toman en cuenta con suficiente antelación. –
El motivo por el que se está implementando el enhebrado ahora es que esta es una aplicación de aprendizaje para mí. El enhebrado siempre fue planeado solo para implementarlo ahora que las características principales de las aplicaciones están completas (en su mayoría). En cuanto a TThread, no puedo encontrar una buena explicación sobre cómo usarlo. – jskrwyk