AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bytes auftrag aufteilen

Ein Thema von gsh · begonnen am 23. Okt 2005 · letzter Beitrag vom 24. Okt 2005
Antwort Antwort
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#1

Bytes auftrag aufteilen

  Alt 23. Okt 2005, 14:43
Hi DPler

Ich hab da ein fast schon mathematisches Problem.
Ich habe eine Datei und ich möchte die Bytes gleichmäßig und ohne Lücken aufteilen.

Also wenn ich eine Datei mit 10 Bytes habe und sie auf drei Tasks gleichmäßig aufteilen will dann würde rein rechnerisch jeder Task 3,3333333 Bytes bekommen da ich aber nur "ganze" Bytes verarbeiten kann muss die aufteilung 3,3,4 sein.
Also es muss nicht jeder Task genau gleichviele Bytes bekommen aber des wichtigste ist des sie halbwegs gleichmäßig aufgeteilt werden und kein Byte ausgelassen wird.

Ich hoffe ich habe mich verständlich ausgedrückt
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Bytes auftrag aufteilen

  Alt 23. Okt 2005, 14:47
Hi,

also nehmen wir an, Du hast jetzt 10 Bytes.

Dann machst Du 10 div 3. Das wäre dann 3 Bytes pro Task. Nun prüfst Du auf den Rest, also entweder 10 mod 3 oder Du zählst die 3 Bytes * 3 Tasks und ziehst das von 10 ab und fügst diesen Wert dem letzten Task zu.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#3

Re: Bytes auftrag aufteilen

  Alt 23. Okt 2005, 14:49
naja sowas hab ich mir auch schon überlegt aber funktioniert des jedesmal?
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Bytes auftrag aufteilen

  Alt 23. Okt 2005, 14:50
Zitat von gsh:
naja sowas hab ich mir auch schon überlegt aber funktioniert des jedesmal?
Also ich wüsste nicht, wieso das nicht immer funktionieren sollte...

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Bytes auftrag aufteilen

  Alt 23. Okt 2005, 14:52
Mit 10 div 3 kriegst du die Anzahl der Bytes die in JEDEN einfliessen müssen. Mit 10 mod 3 kriegst du die Anzahl der Tasks, die jeweils EIN byte MEHR benötigen.
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#6

Re: Bytes auftrag aufteilen

  Alt 23. Okt 2005, 14:53
ok dann werd ich so machen
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#7

Re: Bytes auftrag aufteilen

  Alt 23. Okt 2005, 14:56
Pseudocode:
Delphi-Quellcode:
BytesPerTask = NumberOfBytes div TaskCount);
for i := 0 to TaskCount - 2 do
  StartTask(i (* Task ID *), i * BytesPerTask (* First byte the Task processes *), BytesPerTask (* Number of bytes the task processes*) );
// der letzte task kriegt den Rest, niemals mehr als (BytesPerTask + NumberOfBytes)
StartTask(i, (TaskCount - 1) * BytesPerTask, NumberOfBytes - ((TaskCount - 1) * BytesPerTask));
P.S.: Diesmal kam sogar der rote Kasten, aber jetzt habe ich das extra getippt, jetz' schick' ich des auch los.
  Mit Zitat antworten Zitat
Benutzerbild von Grishnak
Grishnak

Registriert seit: 15. Sep 2005
Ort: Neu-Ulm
111 Beiträge
 
RAD-Studio 2009 Arc
 
#8

Re: Bytes auftrag aufteilen

  Alt 24. Okt 2005, 09:37
@mirage228: wenn nun aber 11 Bytes aufgeteilt werden müssen, dann erhält Thread 1&2 davon 3 Bytes und Thread 3 würde (nach deinem Algorithmus) 5 Bytes erhalten. Besser wäre aber doch 3/4/4!

Mein Vorschlag:
Delphi-Quellcode:
for i := 1 to ANZ_TASKS do
  Task[i].Bytes := GesamtBytes div ANZ_TASKS;
for i := 1 to GesamtBytes mod ANZ_TASKS do
  Task[i].Bytes := Task[i].Bytes + 1;
So erhält jeder Task erstmal gleich viele Bytes zugewiesen, anschließend werden die restlichen n Bytes auf die ersten n Tasks verteilt.
Mach' etwas idiotensicher und irgendjemand erfindet einen besseren Idioten!
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Bytes auftrag aufteilen

  Alt 24. Okt 2005, 09:53
Ich setz' noch einen drauf!
Hier eine gleichmäßige Verteilung mit Bresenham-Algorithmus:

Delphi-Quellcode:
Accu := 0;
for i := 0 to Count - 1 do
begin
  inc(Accu, GesamtMenge);
  Anteil[i] := Accu div Count;
  Accu := Accu mod Count;
end;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#10

Re: Bytes auftrag aufteilen

  Alt 24. Okt 2005, 20:06
uii so genau muss es dann auch nicht sein

Also ich habs jetzt ziemlich einfach gelöst:
Jeder Task bekommt des: ByteSize div Tasks
und der letzte dann noch den rest

(JaJa ich weiss der letzte ist halt immer der was am meisten arbeiten muss )
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz