Goeiemorgen allemaal,
Ik ben bezig in een applicatie waarin ik een log wil wegschrijven in een txt file. Nu loopt dit allemaal vrij goed, maar plots wil ie gewoon niet meer wegschrijven naar het bestand?
Als ik in debugging mode kijk, dan haalt ie weldegelijk de juiste data binnen (vanuit de CAN-bus, wat ik dus in mijn geval wil loggen) .. maar het wegschrijven gebeurd niet meer ..
ik denk dat het iets te maken heeft met de ofstream?
er wordt dus gebruik gemaakt van een thread die aan het running is met z'n oneindige while(1) lus ..
ik dacht eerst dat er een beperking van de ofstream is inzake het aantal keer de stream openen, aangezien het in de while(1) lus zit .. maar als ik dit extern declareer blijf hetzelfde probleem plaatsvinden
hier een stukje broncode:
dit geeft als resultaat bv:
0|65
6|75
12|25
18|35
24|55
29|65
38|65
45|65
50|85
57|25
etc ..
maar na x-aantal seconden houdt deze het voor bekeken. Volgens het programma moet de waarde iedere keer worden weggeschreven .. maar dit is blijkbaar niet het geval
Alvast bedankt!
Alexander
Ik ben bezig in een applicatie waarin ik een log wil wegschrijven in een txt file. Nu loopt dit allemaal vrij goed, maar plots wil ie gewoon niet meer wegschrijven naar het bestand?
Als ik in debugging mode kijk, dan haalt ie weldegelijk de juiste data binnen (vanuit de CAN-bus, wat ik dus in mijn geval wil loggen) .. maar het wegschrijven gebeurd niet meer ..
ik denk dat het iets te maken heeft met de ofstream?
er wordt dus gebruik gemaakt van een thread die aan het running is met z'n oneindige while(1) lus ..
ik dacht eerst dat er een beperking van de ofstream is inzake het aantal keer de stream openen, aangezien het in de while(1) lus zit .. maar als ik dit extern declareer blijf hetzelfde probleem plaatsvinden
hier een stukje broncode:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| while(1){ can_berichten_running = 1; canFlushReceiveQueue(handle); stat_msg1 = canReadSpecific(handle,id1,data_reeks1,&dlc,&flags,×tamp); timestamp1 =canReadTimer(handle); // alle bewerkingen signaal 1 if(stat_msg1 == 0 & schrijven_log & Form2->check_log1->State ){ ofstream datalog1("datalog1.txt", ofstream::out | ofstream::app); if(!start1){ prev_timestamp1 = timestamp1; } time_verschil1 = (timestamp1 - prev_timestamp1); prev_timestamp1 = timestamp1; timer1 += time_verschil1; datalog1 << timer1 << "|"; if(Form2->type_1->Text == "char"){ dat.Xchar[0] = data_reeks1[startbyte1_0]; dat.Xchar[1] = 0; dat.Xchar[2] = 0; dat.Xchar[3] = 0; datalog1 << dat.Xint << "\n"; // dat.Xint haal ik uit een union } } |
dit geeft als resultaat bv:
0|65
6|75
12|25
18|35
24|55
29|65
38|65
45|65
50|85
57|25
etc ..
maar na x-aantal seconden houdt deze het voor bekeken. Volgens het programma moet de waarde iedere keer worden weggeschreven .. maar dit is blijkbaar niet het geval
Alvast bedankt!
Alexander