Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-12-2008
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
como crear un programa multi-nucleo

hola amigos del foro como esta tengo esta curiosidad me he dado cuenta que la mayoria de los programa no aprovechan los procesadores dual core de esta generacion y me gustaria saber si con delphi se prodria hacer una aplicacion para tales fines
Responder Con Cita
  #2  
Antiguo 28-12-2008
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
Usando la busqueda consegui esto
Responder Con Cita
  #3  
Antiguo 28-12-2008
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
ok gracia probare esos codigos
Responder Con Cita
  #4  
Antiguo 28-12-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.298
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Busca ayuda sobre threads. En los foros hay muchos hilos al respecto.
En mi página tienes también un par de ejemplos con código completo de utilización de threads.

Si no recuerdo mal, en el FTP del foro también había alguno.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 31-12-2008
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
amigos e estado probando los codigos que e visto en los hilos relacionados con el tema que e puesto y e escogido uno y funciona a la perfecion pero el inconveniente que veo es que solo funciona en modo consola me gustaria hacer que funcione en modo grafico con formulario a qui le muestro el codigo

Código Delphi [-]
uses Windows;

var
 Dummy, Mask: Cardinal;
 si: TStartupInfo = (cb: SizeOf(TStartupInfo));
 pi: TProcessInformation;

begin
 CreateProcess(nil, 'notepad', nil, nil, False, 0, nil, nil, si, pi); // Ejecutamos el Bloc de notas,
 GetProcessAffinityMask(DWORD(-1), Dummy, Mask);                      // Obtenemos en Mask, los CPUs disponibles,
 if (Mask and 2) <> 0 then                                            // Verificamos si existen dos CPUs como mínimo...
  SetProcessAffinityMask(pi.hProcess, 2);                             // Le asignamos dicho proceso solo al segundo CPU
end.

function Windows.SetProcessAffinityMask(hProcess, dwProcessAffinityMask: Cardinal): LongBool;
// Cada bit de dwProcessAffinityMask representa un microprocesador o nucleo
hProcess := OpenProcess(PROCESS_SET_INFORMATION, False, dwProcessID); // donde dwProcessID es el identificador del proceso
hProcess := GetCurrentProcess; {-1}
hProcess := TProcessInformation.hProcess;
Responder Con Cita
  #6  
Antiguo 31-12-2008
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
Lo que sucede es que con ese codigo estas cambiando la afinidad del proceso en ese caso programa (bloc de notas) a un nucleo especifico, con el codigo de los links que te pase antes es para que asignes los multiples hilos de tu aplicacion a los diferentes nucleos. no se si me explico?
Responder Con Cita
  #7  
Antiguo 31-12-2008
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
si entiendo lo q dices pero si te refiere a este codigo me da error no copila me dice modulo unit incorrecto

Código Delphi [-]
unit ExThread;

interface

uses
  Classes;

type
  TExThread = class(TThread)
  private
    FAffinityMask: DWord;
    procedure SetAffinity(const Value: DWord);
    { Private declarations }
  protected
    procedure Execute; override;
  public
    property AffinityMask : DWord read FAffinityMask write SetAffinity;
  end;

implementation

{ Important: Methods and properties of objects in VCL can only be used in a
  method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TExThread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ TExThread }

procedure TExThread.Execute;
begin
  { Place thread code here }
end;

procedure TExThread.SetAffinity(const Value: DWord);
begin
  FAffinityMask := SetThreadAffinityMask(Handle,Value);
  if FAffinityMask = 0 then raise Exception.Create('Error setting thread affinity mask : ' + IntToStr(GetLastError));
end;

end.
Responder Con Cita
  #8  
Antiguo 31-12-2008
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
Código Delphi [-]
unit exthread;

interface

uses
  Classes, types, Sysutils, Windows;

type
  TExThread = class(TThread)
  private
    FAffinityMask: DWord;
    procedure SetAffinity(const Value: DWord);
    { Private declarations }
  protected
    procedure Execute; override;
  public
    property AffinityMask : DWord read FAffinityMask write SetAffinity;
  end;

implementation

{ Important: Methods and properties of objects in VCL can only be used in a
  method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TExThread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ TExThread }

procedure TExThread.Execute;
begin
  { Place thread code here }
end;

procedure TExThread.SetAffinity(const Value: DWord);
begin
  FAffinityMask := SetThreadAffinityMask(Handle,Value);
  if FAffinityMask = 0 then raise Exception.Create('Error setting thread affinity mask : ' + IntToStr(GetLastError));
end;

end.
Solo tenes que guardar el codigo en una unidad nueva llamada exthread.pas y listo. (solo le hacian falta unas unidades en el uses)
Responder Con Cita
  #9  
Antiguo 31-12-2008
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
ok gracia ya me funciona
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ib_affinity interbase vs doble nucleo Patricio Firebird e Interbase 6 19-11-2008 23:01:09
MsgBox multi linea Como?¿?H THACKER Varios 1 27-09-2008 19:18:33
Como crear un programa para que me formatee la PC federico1 Varios 7 02-06-2007 02:26:23
Crear programa Cliente / Servidor Como?? Mc_Hacks Conexión con bases de datos 4 16-11-2006 19:40:05
Base de datos multi área (multi departamento) Al González Conexión con bases de datos 0 19-03-2004 16:27:14


La franja horaria es GMT +2. Ahora son las 18:05:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi