WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Dateioperation im Thread scheitert [S-Function C++ Simulink]

 

Achim_G
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 12.09.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2022, 11:23     Titel: Dateioperation im Thread scheitert [S-Function C++ Simulink]
  Antworten mit Zitat      
Hallo!

Bei mir ist folgendes Problem aufgetreten:
Ich habe eine Funktion, die einen Text ausgeben soll. Allerdings soll der Thread die Textausgabe übernehmen. Ich habe bereits Berechnungen in Threads ausgelagert, so dass ich behaupte, dass es nicht an meinen Fähigkeiten liegt, einen Thread zu managen.

Ein Versuch sah so aus:

(in mdlStart)
Code:

std::thread t(printToFile);
t.join();
 


(in eigener Datei)
Code:

static void printToFile ()
{
   
    std::ofstream file;
    file.open("file.txt");
    file << "Test 123" << std::endl;
    target.close();
}    


Die Datei "file.txt" liegt im selben Ordner wie die mexw64, die slx und der Source Code. Das Ergebnis ist ein Absturz von Matlab und eine Fehlermeldung, dass eine Zugriffsverletzung vorliegt.

In der Folge habe ich etwas variiert, beispielsweise "file" in mdlStart geöffnet, einen Pointer an printToFile übergeben, dort "*file << "Test 123" << std::endl;" verwendet, den Thread gejoint und anschließend in mdlStart "file" wieder geschlossen. Das Ergebnis blieb gleich. Auch habe ich auch andere Methoden als mdlStart verwendet (u. a. mdlOutputs), aber das Ergebnis bleibt immer gleich.

Ich habe Matlab dann an Visual Studio angefügt. Es entsteht folgende Fehlermeldung:
Ausnahme ausgelöst bei 0x000000007061C028 (test01.mexw64) in MATLAB.exe: 0xC0000005: Zugriffsverletzung beim Ausführen an Position 0x000000007061C028.

Disassembly zeigt dabei auf die Line mit "nop", direkt hinter der schließenden Klammer der Funktion "printToFile":

Code:
*file << "Test 123" << std::endl;
00000000705415DD  mov         rax,qword ptr [rbp+10h]  
00000000705415E1  lea         rdx,[705F003Dh]  
00000000705415E8  mov         rcx,rax  
00000000705415EB  call        00000000705E7D20  
00000000705415F0  mov         rdx,qword ptr [705F60E0h]  
00000000705415F7  mov         rcx,rax  
00000000705415FA  call        00000000705AF480  
}    
00000000705415FF  nop  
0000000070541600  add         rsp,20h  
0000000070541604  pop         rbp  
0000000070541605  ret


(Das obige Disassembly bezieht sich auf eine Variante, bei der die Adresse von "file" übergeben wird und in printToFile lediglich die eine Line steht, die das Schreiben übernimmt.)

Matlab selbst schmeißt das Folgende aus, bevor es abschmiert:
Code:

--------------------------------------------------------------------------------
           Access violation detected at Mo Sep 12 12:16:36 2022 +0200
--------------------------------------------------------------------------------

Configuration:
  Crash Decoding           : Disabled - No sandbox or build area path
  Crash Mode               : continue (default)
  Default Encoding         : windows-1252
  Deployed                 : false
  Graphics Driver          : Unknown hardware
  Graphics card 1          : NVIDIA ( 0x10de ) NVIDIA GeForce GTX 960M Version 30.0.15.1277 (2022-5-4)
  Graphics card 2          : Intel Corporation ( 0x8086 ) Intel(R) HD Graphics 530 Version 22.20.16.4836 (2017-10-17)
  Java Version             : Java 1.8.0_202-b08 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode
  MATLAB Architecture      : win64
  MATLAB Root              : D:\_IT\MatLab2020
  MATLAB Version           : 9.8.0.1721703 (R2020a) Update 7
  OpenGL                   : hardware
  Operating System         : Microsoft Windows 10 Home
  Process ID               : 1448
  Processor ID             : x86 Family 6 Model 94 Stepping 3, GenuineIntel
  Window System            : Version 10.0 (Build 19043)

Fault Count: 1


Abnormal termination:
Access violation

Register State (from fault):
  RAX = 0000000000000003  RBX = 0000000000000009
  RCX = 0000000000000003  RDX = 0000025321a0c800
  RSP = 000000d347bffb78  RBP = 0000000000000009
  RSI = 0000025321a0c800  RDI = 0000000000000003
 
   R8 = 0000000000000009   R9 = 0000000000000000
  R10 = 0000000000000000  R11 = 00000000705ed2e9
  R12 = 00007ff8be5e7d60  R13 = 0000000000000000
  R14 = 0000000000000000  R15 = 0000000000000000
 
  RIP = 000000007061c028  EFL = 00010202
 
   CS = 0033   FS = 0053   GS = 002b

Stack Trace (from fault):
[  0] 0x000000007061c028 C:\Users\Achim\Documents\MATLAB\ThreadTestsPrintToFile\test01.mexw64+00901160 mexfilerequiredapiversion+00870152
[  1] 0x000000007056363d C:\Users\Achim\Documents\MATLAB\ThreadTestsPrintToFile\test01.mexw64+00144957 mexfilerequiredapiversion+00113949
[  2] 0x00000000705bae7b C:\Users\Achim\Documents\MATLAB\ThreadTestsPrintToFile\test01.mexw64+00503419 mexfilerequiredapiversion+00472411
[  3] 0x00000000705bbe44 C:\Users\Achim\Documents\MATLAB\ThreadTestsPrintToFile\test01.mexw64+00507460 mexfilerequiredapiversion+00476452
[  4] 0x00000000705bb31b C:\Users\Achim\Documents\MATLAB\ThreadTestsPrintToFile\test01.mexw64+00504603 mexfilerequiredapiversion+00473595
[  5] 0x00000000705ad792 C:\Users\Achim\Documents\MATLAB\ThreadTestsPrintToFile\test01.mexw64+00448402 mexfilerequiredapiversion+00417394
[  6] 0x00000000705415ff C:\Users\Achim\Documents\MATLAB\ThreadTestsPrintToFile\test01.mexw64+00005631
[  7] 0x00000000705b3f68 C:\Users\Achim\Documents\MATLAB\ThreadTestsPrintToFile\test01.mexw64+00474984 mexfilerequiredapiversion+00443976
[  8] 0x00000000705b4007 C:\Users\Achim\Documents\MATLAB\ThreadTestsPrintToFile\test01.mexw64+00475143 mexfilerequiredapiversion+00444135
[  9] 0x00000000705d537c C:\Users\Achim\Documents\MATLAB\ThreadTestsPrintToFile\test01.mexw64+00611196 mexfilerequiredapiversion+00580188
[ 10] 0x00000000705eaf7f C:\Users\Achim\Documents\MATLAB\ThreadTestsPrintToFile\test01.mexw64+00700287 mexfilerequiredapiversion+00669279
[ 11] 0x000000007055fdc4 C:\Users\Achim\Documents\MATLAB\ThreadTestsPrintToFile\test01.mexw64+00130500 mexfilerequiredapiversion+00099492
[ 12] 0x00007ff8be61af5a                     C:\WINDOWS\System32\msvcrt.dll+00241498 beginthreadex+00000298
[ 13] 0x00007ff8be61b02c                     C:\WINDOWS\System32\msvcrt.dll+00241708 endthreadex+00000172
[ 14] 0x00007ff8bcd57034                   C:\WINDOWS\System32\KERNEL32.DLL+00094260 BaseThreadInitThunk+00000020
[ 15] 0x00007ff8be722651                      C:\WINDOWS\SYSTEM32\ntdll.dll+00337489 RtlUserThreadStart+00000033

 

Ich kann mir den Fehler nicht erklären und brauche eure Hilfe. Vielen Dank! Smile

LG Achim
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.