Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 03:50

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Threads auf Arbeitsspeicher auslagern

Discussion on Threads auf Arbeitsspeicher auslagern within the C/C++ forum part of the Coders Den category.

Reply
 
Old 03/25/2016, 22:36   #16
 
Waller66's Avatar
 
elite*gold: 0
Join Date: Nov 2010
Posts: 1,548
Received Thanks: 333
wie kann ich die dll per c++ aufrufen, also funktions bezogen und wie ich die dann im projekt zu initialisieren ? wie sicher ist der c++ quellcode über den normalen compiler ? decompile c++ möglich ? wenn ja wie schützen ? und eine dummere frage aber ich finde nicht ganz wie ich strings in int zeit rechnen kann,
am besten ganze daten also "jahr.monat.tag stunden:minuten:sek" als string oder char*

wenn es keine funktion zentral gibt würde ich probieren :

int date2time (string *date)
{
// splitten
int years = (years(splitd) - 1997) * 31536000 ;//sekundeneinesjahres
int months = months * // 30 tage? oder ist die rechnung zu leicht gedacht ?
int days = days * 86400 ;
int hours = hours * 3600 ;
int minuts = minuts * 60;
return();
}
Waller66 is offline  
Old 03/25/2016, 23:40   #17
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
Quote:
Originally Posted by Waller66 View Post
wie kann ich die dll per c++ aufrufen, also funktions bezogen und wie ich die dann im projekt zu initialisieren ? wie sicher ist der c++ quellcode über den normalen compiler ? decompile c++ möglich ? wenn ja wie schützen ? und eine dummere frage aber ich finde nicht ganz wie ich strings in int zeit rechnen kann,
am besten ganze daten also "jahr.monat.tag stunden:minuten:sek" als string oder char*

wenn es keine funktion zentral gibt würde ich probieren :

int date2time (string *date)
{
// splitten
int years = (years(splitd) - 1997) * 31536000 ;//sekundeneinesjahres
int months = months * // 30 tage? oder ist die rechnung zu leicht gedacht ?
int days = days * 86400 ;
int hours = hours * 3600 ;
int minuts = minuts * 60;
return();
}
Dll:
Gibt mehrere Möglichkeiten, aber prinzipiell gehts easy über:
LoadLibrary + GetProcAddress
bzw. einfach mal googlen.

C++ Quellcode:
Relativ sicher, aber google doch am besten mal, z.B.

Schützen:
Z.b. damit:

String in Zeit (= timestamp):
Shadow992 is offline  
Thanks
1 User
Old 03/25/2016, 23:58   #18
 
Waller66's Avatar
 
elite*gold: 0
Join Date: Nov 2010
Posts: 1,548
Received Thanks: 333
klappt bei mir mit der zeit aber nicht

struct tm tm;
if(strptime (cdate,"%Y.%m.%D %H:%M:%S",&tm,0))
{
int d = tm.tm_mday,
m = tm.tm_mon + 1,
y = tm.tm_year + 1900;
s = tm.tm_hour;
min = tm.tm_min;
sek = tm.tm_sek;

}

c++ ist richtig scheiße vom code zum googeln , nicht vernünftige code snippets die man direkt benutzen kann, man kriegt meist nie eine direkte antwort
Waller66 is offline  
Old 03/26/2016, 01:29   #19
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
Quote:
Originally Posted by Waller66 View Post
klappt bei mir mit der zeit aber nicht

struct tm tm;
if(strptime (cdate,"%Y.%m.%D %H:%M:%S",&tm,0))
{
int d = tm.tm_mday,
m = tm.tm_mon + 1,
y = tm.tm_year + 1900;
s = tm.tm_hour;
min = tm.tm_min;
sek = tm.tm_sek;

}

c++ ist richtig scheiße vom code zum googeln , nicht vernünftige code snippets die man direkt benutzen kann, man kriegt meist nie eine direkte antwort
Wenn du schon C++ programmierst, dann solltest du auch den C++11 Weg bevorzugen:

Code:
    std::tm tm = {};
    std::stringstream ss;
    ss<<"2014.10.21 12:35:34";
    ss >> std::get_time(&tm, "%Y.%m.%d %H:%M:%S");

    int d = tm.tm_mday,
    m = tm.tm_mon + 1,
    y = tm.tm_year + 1900,
    s = tm.tm_hour,
    min = tm.tm_min,
    sek = tm.tm_sec;

    std::cout<<sek<<" "<<min<<" "<<y<<std::endl;
Klappt einwandfrei bei mir.
Shadow992 is offline  
Thanks
1 User
Old 03/26/2016, 07:39   #20
 
Waller66's Avatar
 
elite*gold: 0
Join Date: Nov 2010
Posts: 1,548
Received Thanks: 333
der bezeichner get_time nicht gefunden

#include <iomanip> , ich bin neu woher soll ich wissen das es nicht aus time.h stammt ? aber finally workt danke (MÜsste aber wo verweist er dann auf den string wie kann ich den ziel string ändern, danke)

und nochmal zu den threads, wie soll ich es realisieren : der lese thread schreibt durchgehend auf arrayfelder wo der leser über nen counter immer auf das aktuelle feld zeigt oder über fixe bereiche die er einliest und die threads dann verarbeiten, ich habe angst das sonst sich daten verschieben wenn der eine noch die falsche nicht mehr aktuelle adresse benutzt...

und wenn ich mit zeit rechne wie wandle ich das in int am besten um ?

int date2time (int *year,int *month ,int *day,int *hour,int *minuten,int *sekunden)
{
// splitten
int years = (*year - 1997) * 31536000 ;//sekundeneinesjahres
int months = months * ???;
int days = *day * 86400 ;
int hours = *hour * 3600 ;
int minuts = *minuten * 60;
int seks = *sekunden;
int time = years + months + hours + minuts + seks;
return(time);
}

wie kann man eine datei zeile für zeile lesen ?

std::ifstream infile(*filename);
std::string line;
while (std::getline(infile, line))
{
std::istringstream iss(line);
int a, b;
if (!(iss >> a >> b)) { break; } // error
Waller66 is offline  
Old 03/26/2016, 12:35   #21
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
Quote:
Originally Posted by Waller66 View Post
der bezeichner get_time nicht gefunden

#include <iomanip> , ich bin neu woher soll ich wissen das es nicht aus time.h stammt ? aber finally workt danke (MÜsste aber wo verweist er dann auf den string wie kann ich den ziel string ändern, danke)

und nochmal zu den threads, wie soll ich es realisieren : der lese thread schreibt durchgehend auf arrayfelder wo der leser über nen counter immer auf das aktuelle feld zeigt oder über fixe bereiche die er einliest und die threads dann verarbeiten, ich habe angst das sonst sich daten verschieben wenn der eine noch die falsche nicht mehr aktuelle adresse benutzt...

und wenn ich mit zeit rechne wie wandle ich das in int am besten um ?

int date2time (int *year,int *month ,int *day,int *hour,int *minuten,int *sekunden)
{
// splitten
int years = (*year - 1997) * 31536000 ;//sekundeneinesjahres
int months = months * ???;
int days = *day * 86400 ;
int hours = *hour * 3600 ;
int minuts = *minuten * 60;
int seks = *sekunden;
int time = years + months + hours + minuts + seks;
return(time);
}
Time.h vs iomanip:
"Woher soll ich das wissen?": Gar nicht aber google weiß es und genau das macht die Sprache für die meisten auch so schwer, weil man bei Hilfe immer davon ausgeht, dass die jeweilige Person genug weiß um sich solche Sachen selbst zu ergooglen (und das nicht nur aus Faulheit passiert sondern ich möchte fast schon sagen eine Art philosophie geworden ist, die in meinen Augen auch Sinn macht).

Wie Zeit umrechnen?
Schmeiß das was bei std::get_time in "tm" steht einfach in std::mktime(&tm) und speicher dir den return Wert als int.

Threads:
Wie gesagt bevorzuge ich die Version, dass das Lesen nicht direkt parallel mit der Verarbeitung passiert. Vielmehr würde 2 Arrays/Objekte/whatever nehmen und immer genau das Array/Objekt füllen, welches gerade nicht gebraucht wird. Dann musst du dir wenig Sorgen um Synchronisation machen und hast trotzdem einen annehmbaren SpeedUp.
Das heißt solange der Lese-Thread in Array1-Daten schreibt arbeiten die anderen Threads mit Array2. Sobald der Lese-Thread und alle Arbeiter-Threads fertig sind wird das ganze getauscht, das heißt Lese-Thread Array2 und Arbeiter Thread Array1. Das ganze kann man dann beliebig oft mit relativ wenig Synchronisation hin und her tauschen.
Shadow992 is offline  
Old 03/26/2016, 12:36   #22
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Quote:
Originally Posted by Shadow992 View Post
Dll:
Gibt mehrere Möglichkeiten, aber prinzipiell gehts easy über:
LoadLibrary + GetProcAddress
bzw. einfach mal googlen.
Das ist ja mal wohl das komplette gegenteil von "easy".
- Man muss die DLL manuell laden.
- Man kann sich bei den Funktionsnamen verschreiben, ohne, dass der Compiler meckert.
- Man verliert Typsicherheit.
- Man muss das Ergebnis von GetProcAddress irgendwo speichern.
- Funktioniert natürlich nur auf Windows.
- Man muss eh
Code:
__declspec(dllexport)
auf Windows benutzen, warum dann nicht auch gleich
Code:
__declspec(dllimport)
?
- Für sowas gibt es einen linker.
- Dürfte ziemlich schwer bzw. hässlich werden templates oder Funktionen von Klassen o.ä. zu importieren, falls man sie denn benutzt.

Quote:
Originally Posted by Waller66 View Post
wie kann ich die dll per c++ aufrufen, also funktions bezogen und wie ich die dann im projekt zu initialisieren ?
Würde dir empfehlen folgendes zu machen:
Wenn du die DLL compilst, definierst du
Code:
MY_LIBARY_BUILD
oder so ähnlich. Dann kannst du in einen Header folgendes packen:
Code:
#ifdef MY_LIBRARY_BUILD
#define MY_LIBRARY_FN __declspec(dllexport)
#else
#define MY_LIBRARY_FN __declspec(dllimport)
#endif
Dann kannst du Funktionen, die du exportieren willst, so deklarieren:
Code:
MY_LIBRARY_FN void abc();
Natürlich machst du das nur auf Windows. Gcc oder Clang exportieren eh alles (glaube ich). Musst dann nur zu deiner DLL linken, von dem Projekt, aus dem du die benutzt.

Generell frage ich mich aber, warum du überhaupt eine dll nutzt ? Warum nicht einfach eine statische Library ? Dann hast du das Problem mit dem exportieren bzw. importieren gar nicht und musst nur zu der Library linken.

Quote:
Originally Posted by Shadow992 View Post
Code:
    std::tm tm = {};
    std::stringstream ss;
    ss<<"2014.10.21 12:35:34";
    ss >> std::get_time(&tm, "%Y.%m.%d %H:%M:%S");

    int d = tm.tm_mday,
    m = tm.tm_mon + 1,
    y = tm.tm_year + 1900,
    s = tm.tm_hour,
    min = tm.tm_min,
    sek = tm.tm_sec;

    std::cout<<sek<<" "<<min<<" "<<y<<std::endl;
Man könnte (sollte) auch noch benutzen.

Quote:
Originally Posted by Shadow992 View Post
Das sind Mikro-Optimierungen, die dir praktisch jeder Compiler abnimmt. So viel wie ich mitbekommen habe macht dir GNU z.B. automatisch (ab o1 glaub ich sogar schon) aus dem:

Code:
for (int i=0;i<100;i++)
{
  double d=0;
  // mache was mit d
}
Das hier:
Code:
double d;
for (int i=0;i<100;i++) 
{
  d=0;
  // mache was mit d
}
Selbst ohne Optimierungen sollte für beide Varianten der gleiche Code generiert werden, oder irre ich mich da ? Ich meine d ist ja nur ein Name für einen Wert auf dem Stack / ein Register und der Stack wird eh am Anfang der Funktion initialisiert.

Quote:
Originally Posted by Waller66 View Post
und wenn ich mit zeit rechne wie wandle ich das in int am besten um ?
Garnicht. Du benutzt .

Quote:
Originally Posted by Waller66 View Post
int date2time (int *year,int *month ,int *day,int *hour,int *minuten,int *sekunden)
{
// splitten
int years = (*year - 1997) * 31536000 ;//sekundeneinesjahres
int months = months * ???;
int days = *day * 86400 ;
int hours = *hour * 3600 ;
int minuts = *minuten * 60;
int seks = *sekunden;
int time = years + months + hours + minuts + seks;
return(time);
}
Warum übergibst du nur Pointer zu ints als Parameter ? Ergibt irgendwie wenig Sinn für mich.
th0rex is offline  
Thanks
1 User
Old 03/26/2016, 12:53   #23
 
Waller66's Avatar
 
elite*gold: 0
Join Date: Nov 2010
Posts: 1,548
Received Thanks: 333
okay soweit so gut mir fehlt noch read file line by line komme mit den codes ich finde nicht klar und ja war auch 1 sek googeln aber wenn du es weist warum lässt du mich das "böswillig" suchen ??? behinderst einen deine hilfe anzunehmen
und das ist keine noob protection

Quote:
Originally Posted by Shadow992 View Post
Time.h vs iomanip:
"Woher soll ich das wissen?": Gar nicht aber google weiß es und genau das macht die Sprache für die meisten auch so schwer, weil man bei Hilfe immer davon ausgeht, dass die jeweilige Person genug weiß um sich solche Sachen selbst zu ergooglen (und das nicht nur aus Faulheit passiert sondern ich möchte fast schon sagen eine Art philosophie geworden ist, die in meinen Augen auch Sinn macht).
Waller66 is offline  
Old 03/26/2016, 13:23   #24
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
Warum Dll:
Naja er meinte Forms erstellen in C++ ist hässlich, also wird er wohl kaum C++ für die Forms benutzen (zumindest laut seiner Aussage). Und damit bleibt nun einmal nicht viel übrig... Prinzipiell nur Binary-Files die er ausführt oder halt DLL-Files. Zumindest kenne ich nicht mehr Möglichkeiten, darfst mir aber gerne zeigen wie du eine statische Lib "easy" in AutoIt einfügst. Immerhin ist LoadLibrary und GetProcAdress Bestandteil der WinApi und damit in jeder halbwegs guten Programmiersprache vertreten.

Optimierung:
Gut da hast du natürlich recht bei einem double macht das nichts. Anders sieht es aber bei einem std::string str=" xxx"; aus. Double war also tatsächlich ein schlechtes Beispiel, war nur am Handy online und zu faul string zu schreiben.
Bei string (bzw. Objekten allgemein) kanns dir passieren, dass du den Konstruktor/Destruktor nicht jedes mal in der Schleife aufrufst, obwohl man das erwartet. Sondern, da nur "const" Methoden benutzt werden, das Objekt nur einmal den Konstruktor aufrufen muss. Alles in allem war mein Beispiel aber sehr schlecht...

Warum selbst googlen?
Weil das am Anfang 90% der Aufgaben sind und man immer wieder googlen muss. Da lohnt es sich frühzeitig "richtig googlen" nach Fachbegriffen/Fehlern/Fragen zu trainieren.
Allgemein hat man sich als "Helfer" sehr schnell keine Lust mehr, wenn man nicht selbst zumindest ein kleines Detail dazu lernt bzw. wenn man sieht, dass der Hilfesuchende relativ wenig Lust hat selbst ein Problem zu lösen.

Ich weiß nicht ob du jemals Nachhilfe gegeben hast (und wenns nur in der Familie war). Aber ich bin überzeugt, dass du dem Kerl wenig beibringen kannst, wenn er kaum was selbst probiert, nichts mitschreibt, allgemein einfach nur da sitzt und passiv wirkt.
Am besten lernt man, wenn mans selbst macht und da gehört natürlich auch googlen dazu.

Außerdem pflegte ein Professor von mir immer zu sagen:
"Programmieren ist wie Sex. Ab einem bestimmten Punkt wird man nicht mehr durch zusehen besser".
Der Punkt kann früher oder später kommen, aber irgendwann wird er kommen und darauf versucht man die Leute vorzubereiten.

Außerdem spielt meistens noch die eigene Faulheit mit rein.
Shadow992 is offline  
Thanks
1 User
Old 03/26/2016, 13:27   #25
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Quote:
Originally Posted by Shadow992 View Post
Warum Dll:
Naja er meinte Forms erstellen in C++ ist hässlich, also wird er wohl kaum C++ für die Forms benutzen (zumindest laut seiner Aussage). Und damit bleibt nun einmal nicht viel übrig... Prinzipiell nur Binary-Files die er ausführt oder halt DLL-Files. Zumindest kenne ich nicht mehr Möglichkeiten, darfst mir aber gerne zeigen wie du eine statische Lib "easy" in AutoIt einfügst. Immerhin ist LoadLibrary und GetProcAdress Bestandteil der WinApi und damit in jeder halbwegs guten Programmiersprache vertreten.
Ok das habe ich dann wohl überlesen. Wenn er c++ in einer anderen Programmiersprache benutzen will bleibt ihm nichts anderes übrig.
Aber das wird dann auch einige Probleme aufwerfen (z.B. Sprache X Klasse -> C++ Klasse). Ich glaube auch kaum, das Qt schwerer oder leichter ist, als das in irgendeiner anderen Sprache zu machen. Aber das ist ja seine Entscheidung.

Quote:
Originally Posted by Shadow992 View Post
Allgemein hat man sich als "Helfer" sehr schnell keine Lust mehr, wenn man nicht selbst zumindest ein kleines Detail dazu lernt bzw. wenn man sieht, dass der Hilfesuchende relativ wenig Lust hat selbst ein Problem zu lösen.
Und dann wird dir auch noch unterstellt du würdest ihn böswillig behindern deine Hilfe anzunehmen lol.
th0rex is offline  
Thanks
1 User
Old 03/26/2016, 13:44   #26
 
Waller66's Avatar
 
elite*gold: 0
Join Date: Nov 2010
Posts: 1,548
Received Thanks: 333
naja ich lerne ohne umwege irgendwie besser aber scheinbar philosophie

wie geht readfile line by line, das klappt bei mir nicht methode in irgendwelchen vorherigen beiträgen hier im thread

und ich will c++ code zur laufzeit ins programm laden und ansteuern können (also c++ form läd c++ code)
Waller66 is offline  
Old 03/26/2016, 13:54   #27
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Quote:
Originally Posted by Waller66 View Post
naja ich lerne ohne umwege irgendwie besser aber scheinbar philosophie

wie geht readfile line by line, das klappt bei mir nicht methode in irgendwelchen vorherigen beiträgen hier im thread

und ich will c++ code zur laufzeit ins programm laden und ansteuern können (also c++ form läd c++ code)
Wenn du Code zur Laufzeit laden willst, musst du das so machen, wie Shadow es beschrieben hat.

So liest du eine Datei zeilenweise ein:
Code:
std::ifstream in{"fileName.txt"};
for(std::string line; std::getline(in, line)) {

}
th0rex is offline  
Thanks
1 User
Old 03/26/2016, 15:36   #28
 
Waller66's Avatar
 
elite*gold: 0
Join Date: Nov 2010
Posts: 1,548
Received Thanks: 333
sizeof(*user) oder sizeof(user)

bekomme ab den wert das er nen neuen user erstellen sollen (struct user array platz fillen)
nen fehler also nach dem 2ten aufrufen

[Image]http://i.epvpimg.com/sXXbf.png[/image]
Waller66 is offline  
Old 03/26/2016, 16:34   #29
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
Quote:
Originally Posted by Waller66 View Post
sizeof(*user) oder sizeof(user)

bekomme ab den wert das er nen neuen user erstellen sollen (struct user array platz fillen)
nen fehler also nach dem 2ten aufrufen

[Image]http://i.epvpimg.com/sXXbf.png[/image]
Regel #1:
Benutze nie sizeof als Anfänger.

Regel #2:
Wenn du kein Anfänger bist und genau weißt was sizeof macht, benutze es erst recht nicht, außer es gibt keine andere sinnvolle Alternative (z.B. wenn man die Größe einer Klasse braucht für einen eigenen Allocator).

Regel #3:
Halte dich an Regel #1 & #2 ohne Ausnahme!

Edit:
Alternativen bei Arrays wären:
Globale const variable mit der Größe, per parameter überegeben oder noch besser: Gleich std::vector bzw. std::list benutzen.
Shadow992 is offline  
Thanks
2 Users
Old 03/26/2016, 21:16   #30
 
Waller66's Avatar
 
elite*gold: 0
Join Date: Nov 2010
Posts: 1,548
Received Thanks: 333
also einfach einmal sizeof in eine int variable und die dann immer benutzen ? ich danke euch für den ganzen support
Waller66 is offline  
Reply


Similar Threads Similar Threads
[PHP] Funktionen auslagern
11/26/2015 - Web Development - 2 Replies
Wollte fragen ob es sinnvoll ist functionen alle in eine datei auszulagern z.b. sachen wie die connection zur datenbank oder eine login funktion und sie dann in der entsprechenden stelle nur noch aufzurufen. Danke:handsdown:
Neue SSD was auslagern?
06/16/2015 - Technical Support - 5 Replies
Hab mir ne neue SSD (Samsung 850 EVO) geholt und darauf soll eigentlich nur windows, paar treiber/programme und 1 Spiel. Hab überleg eigene Dokumente, bilder, musik downloads etc auf eine andere festplatte zu machen, nur weiß ich leider nicht so recht wie. Gibt es ansonsten noch etwas was ich bei der ssd beachten soll? (AHCI ist an und läuft auch über sata3). Hab bereits den Computerschutz mit der Wiederherstellung ausgeschaltet und 0,3 TB geschrieben
PHP - Seitencontent auslagern
01/26/2014 - Web Development - 4 Replies
Liebe Coder unter euch, ich habe versucht, in meiner Webseite den Seitencontent der einzelnen Unterseiten auszulagern. Soll heißen, dass ich eine Standarddatei "index.php" habe in der alles definiert ist. Wenn ich nun auf eine andere Datei wechsel, soll die URL um "?page=SEITENNAME" erweitert werden und der Content soll aus der Datei SEITENNAME im Verzeichnis "page" geladen werden. Meine Navigation: <ul> <li><a href="?page=index">Home</a>< /li> <li><a href="?page=activity"...
Von 5GB Arbeitsspeicher werden nur 4GB Arbeitsspeicher angezeit?? Hilft mir
12/26/2012 - Technical Support - 8 Replies
Ich habe mir heute ein Arbeisspeicher (RAM) Karte gekauft. Die 2GB hat, ich habe die eingebaut. Computer angemacht, und dann wurden nur 4 GB angezeigt. Ich hatte davor 3 GB Arbeitsspeicher drinnen. Mein Computer: Windows 7 / 64 Bit / Was kann ich machen?? Oder kann mein Computer nicht mehr wie 4GB Arbeitsspeicher haben??



All times are GMT +2. The time now is 03:50.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.