[gelöst]Fehler-Threadsicher(Kompileroption)&getlasterror

Fragen und Bugreports zur PureBasic 4.0-Beta.
Toshy
Beiträge: 710
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

[gelöst]Fehler-Threadsicher(Kompileroption)&getlasterror

Beitrag von Toshy »

[edit]Ich hatte mein Anliegen wirklich sehr undeutlich vormuliert. Es geht mir um die Kompilereinstellung "threadsicher". Ist diese aktiviert, liefert "getlasterror" keine "korrekte Fefhlermeldung" zurück. ist das windowsspezifisch oder ein Bug? Da ich ja keine THreads hier nutze,vermute ich, das PB was nicht ganz korrekt macht. Anderers seits vermute ich, das getlasterror, was ja ein Apiaufruf ist, einfach nur "durchgereicht" wird. Es geht mir also darum rauszubekommen, weshalb "threadsicher" ein anderes verhalten aufweist und wie man das richtig hinbekommt.[/edit]

Hallo.
Folgender noch nicht vollständig entwickelter Code wird auf meinem Notebook mit 2 Akkuks ausgeführt. Der code gibt leider noch nicht das aus, was er soll ( 2 Akkus, wenn auch 2 drinn sind), aber das tut hier nichts zur Sache.
Kompeliere ich das nun unter PB4

Code: Alles auswählen

  ;http://www.google.com/codesearch 
  ;http://msdn2.microsoft.com/en-us/library/bb204769.aspx
  ;http://search.msdn.microsoft.com/search/Redirect.aspx?title=Enumerating+Battery+Devices+&url=http://msdn2.microsoft.com/en-us/library/bb204769.aspx
  
  #DIGCF_PRESENT = $00000002
  
  #DIGCF_DEVICEINTERFACE = $00000010
  
  Prototype SDEDI(a,b,c,d,e)
  ;Prototype SDEDID(a,b,c,d,e,f)
  
  
  If OpenLibrary(0,"Setupapi.dll")
    SetupDiEnumDeviceInterfaces.SDEDI = GetFunction(0,"SetupDiEnumDeviceInterfaces") 
    If  GetFunction(0,"SetupDiEnumDeviceInterfaces")  = 0
      MessageRequester("error","")
    EndIf
    Debug "ok"
    ;SetupDiGetDeviceInterfaceDetail.SDEDID = GetFunction(0,"SetupDiGetDeviceInterfaceDetailW") 
    If 0;GetFunction(0,"SetupDiGetDeviceInterfaceDetailW") = 0
      MessageRequester("error","SetupDiGetDeviceInterfaceDetail")
    EndIf
    Debug "ok"
  EndIf 
  
  Structure SP_DEVICE_INTERFACE_DATA
    cbSize.l
    InterfaceClassGuid.GUID
    flags.l
    reserved.l
  EndStructure
  
  NewList ll_did.SP_DEVICE_INTERFACE_DATA()
  ClearList(ll_did()) 
  did.SP_DEVICE_INTERFACE_DATA
  did\cbSize = SizeOf(did)
  tempSizeOf_ll_did.SP_DEVICE_INTERFACE_DATA
  ;did\cbSize = SizeOf(did)
  SizeOf_ll_did = SizeOf(tempSizeOf_ll_did)
  
  hdev = SetupDiGetClassDevs_(?GUID_DEVICE_BATTERY,0,0,#DIGCF_PRESENT | #DIGCF_DEVICEINTERFACE)
  ;hdev = SetupDiGetClassDevs_(?GUID_DEVICE_BATTERY,0,0,0)
  Debug "hdev: " +Str (hdev)
  ;Debug "GetLastError: " + Str(GetLastError_()) ;#ERROR_NO_MORE_ITEMS
  If hdev <> #INVALID_HANDLE_VALUE ;-1
    idev = 0
    Repeat
      ; SetupDiEnumDeviceInterfaces(hdev,0,?GUID_DEVICE_BATTERY,0,@did)
      AddElement(ll_did())
      ll_did()\cbSize = SizeOf_ll_did
      ;did\cbSize = SizeOf(did)
      ;ReturnSetupDiEnumDeviceInterfaces = SetupDiEnumDeviceInterfaces(hdev,0,?GUID_DEVICE_BATTERY,idev,@did)
      ReturnSetupDiEnumDeviceInterfaces = SetupDiEnumDeviceInterfaces(hdev,0,?GUID_DEVICE_BATTERY,idev,@ll_did())
      ReturnGetLastErrorSetupDiEnumDeviceInterfaces = GetLastError_()
      If ReturnSetupDiEnumDeviceInterfaces > 0
        
        
        Debug "SetupDiEnumDeviceInterfaces: " + Str( ReturnSetupDiEnumDeviceInterfaces )
        Debug "cbSize: " + Str(ll_did()\cbSize)
        Debug "InterfaceClassGuid: " + Str(ll_did()\InterfaceClassGuid) + " : " + Str(PeekQ(ll_did()\InterfaceClassGuid)) + " : " + Str(PeekQ(8+ll_did()\InterfaceClassGuid))
        Debug "flags: " + Str(Cflags)
        ;Debug "InterfaceClassGuid: " + Str(did\InterfaceClassGuid) + " : " + Str(PeekQ(did\InterfaceClassGuid)) + " : " + Str(PeekQ(8+did\InterfaceClassGuid))
        ;Debug "flags: " + Str(did\flags)
        Debug "ReturnGetLastErrorSetupDiEnumDeviceInterfaces: " + Str(ReturnGetLastErrorSetupDiEnumDeviceInterfaces) ;#ERROR_NO_MORE_ITEMS
        cbRequired.l = 0
        ;ReturnSetupDiGetDeviceInterfaceDetail =  SetupDiGetDeviceInterfaceDetail(hdev,@ll_did(),0,0,cbRequired,0)
        Debug "SetupDiGetDeviceInterfaceDetail: " + Str(ReturnSetupDiGetDeviceInterfaceDetail)
        Debug "cbRequired: " + Str(cbRequired)
        Debug "-----"
      Else
        Debug "ReturnGetLastErrorSetupDiEnumDeviceInterfaces: " + Str(ReturnGetLastErrorSetupDiEnumDeviceInterfaces) ;#ERROR_NO_MORE_ITEMS
        DeleteElement(ll_did()) 
      EndIf
      
      
      ;[21:10:00] GetLastError: 1784
      
      
      
      idev + 1
    Until idev => 100 Or ReturnGetLastErrorSetupDiEnumDeviceInterfaces = #ERROR_NO_MORE_ITEMS ;259
    ; SetupDiDestroyDeviceInfoList_(hdev)
  EndIf
  
  DataSection
  GUID_DEVICE_BATTERY:
  Data.l $72631E54
  ;Data.l $72631E54
  Data.w $78A4
  Data.w $11D0
  Data.b $BC, $F7, $00, $AA, $00, $B7, $B3, $2A
  EndDataSection 
    
kommt wenn ich in den Projekteinstellungen NICHTS auswähle folgendes raus:
[01:50:46] ok
[01:50:46] ok
[01:50:46] hdev: 1336552
[01:50:46] SetupDiEnumDeviceInterfaces: 1
[01:50:46] cbSize: 28
[01:50:46] InterfaceClassGuid: 8986524 : 1919098452 : -1442777156
[01:50:46] flags: 0
[01:50:46] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:50:46] SetupDiGetDeviceInterfaceDetail: 0
[01:50:46] cbRequired: 0
[01:50:46] -----
[01:50:46] SetupDiEnumDeviceInterfaces: 1
[01:50:46] cbSize: 28
[01:50:46] InterfaceClassGuid: 8986572 : 1919098452 : -1442777156
[01:50:46] flags: 0
[01:50:46] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:50:46] SetupDiGetDeviceInterfaceDetail: 0
[01:50:46] cbRequired: 0
[01:50:46] -----
[01:50:46] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 259
DAs sollte korrekt sein. Zum Schluß wird 259 ausgegeben durch getlasterror.
Aktiviere ich nun "Threadsicher" funktioniert getlasterror wohl nicht mehr richtig. Es kommt zu folgender Ausgabe:
[01:52:08] ok
[01:52:08] ok
[01:52:08] hdev: 1336680
[01:52:08] SetupDiEnumDeviceInterfaces: 1
[01:52:08] cbSize: 28
[01:52:08] InterfaceClassGuid: 8986540 : 1919098452 : -1442777156
[01:52:08] flags: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] SetupDiGetDeviceInterfaceDetail: 0
[01:52:08] cbRequired: 0
[01:52:08] -----
[01:52:08] SetupDiEnumDeviceInterfaces: 1
[01:52:08] cbSize: 28
[01:52:08] InterfaceClassGuid: 8986588 : 1919098452 : -1442777156
[01:52:08] flags: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] SetupDiGetDeviceInterfaceDetail: 0
[01:52:08] cbRequired: 0
[01:52:08] -----
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
[01:52:08] ReturnGetLastErrorSetupDiEnumDeviceInterfaces: 0
Was kann das denn sein? THreadsicher ist für mich sehr wichtig.
Gruß Toshy
Zuletzt geändert von Toshy am 06.02.2007 01:21, insgesamt 5-mal geändert.
1. AMD Athlon II X2 250P,4GB-RAM,WinXP
2. Notebook,500mhz,128MB-RAM,WINXP
3. WHS 2003
Inet: 6Mbit Down/386Kbit Up,Flat
PB4.60
Messenger: Trillian
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Wenn ich nichts einschalte kommt IMA, wenn ich Threadsafe einschalte auch,
nur bei Unicode kommt Dr Watson :mrgreen:
Das liegt mit Sicherheit nicht an PB sondern am Code
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Toshy
Beiträge: 710
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

Was meinst du mit IMA?
Also, das bei UNICODE ein fehler kommt ist recht klar, da dere Code darauf nicht abgestimmt ist, aber gerade darauf hin umgebaut wird.
Nachvollziehn kann man das wenn überhaupt wohl nur, wenn man ein Akku bzw. Notebook hat. Es geht darum, das der selbe Code im Threadsafemodus halt ein anderes Ergebnis ausgibt (Errorcode 259) als im normalen Modus. Testen kann man das halt nur mit Notebookakku, da der 259 nur anzeigt, das der letzte Akku "ausgelesen" wurde. Auch wenn das noch nicht wirklich klappt (bzw. ich mir da noch nicht sicher bin). hehe.
1. AMD Athlon II X2 250P,4GB-RAM,WinXP
2. Notebook,500mhz,128MB-RAM,WINXP
3. WHS 2003
Inet: 6Mbit Down/386Kbit Up,Flat
PB4.60
Messenger: Trillian
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

>>Was meinst du mit IMA?
Invalid Memory Access -> Fehlermeldung. :wink:
-.-"
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Auch wenn ich keinen Akku in meinem PC habe (müßte sehr Kräftig sein :mrgreen: ),
so darf das Programm nicht einfach abstürzen, wenns sauber gecodet ist.
Dein Codeschnippsel macht nichts, ausser einfach abzuschmieren.
Mit anderen Worten, es werden falsche oder falsche Anzahl an paramerten
übergeben, falsche Strukture, ByVal statt ByRef oder sonstwas.
Der Bug ist bestimmt nicht in PB, der sitzt wahrscheinlich ... :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

@Toshy
Antworte bitte nochmal, wenn Du dies gelesen hast, danach gehts dann
hier: http://www.purebasic.fr/german/viewtopic.php?t=11827
weiter, und dieser kleinere Teil kommt in den Müll, damit es übersichtlich
bleibt. (bzw. spätestens in 48 std.)

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Toshy
Beiträge: 710
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

hallo. ich bitte diesen Teil nicht dazu zu nehmen, das liegt einfach daran, das beides unterschiedliche Dinge sind, wenn auch hier mit selbigen Code. Das Problem hatte ich auch schon mit anderem Code, nur der war immer zu lang um ihn zu posten oder zu kürzen. Hier geht es noch. Mir geht es nicht um die Richtigkeit von "Powerstatus", sondern ich habe einen extra Thread gewählt, weil es mir hier darum geht, weshalb bitte unterschiedliches Verhalten auftritt. Selbst wenn es da noch einen Memoryfehler gibt, der den Code abstürzten läßt, weshalb kommen dann unterschiedliche Fehler, je nachdem wie ich kompeliere. Weil das ja nicht auf jedem Rechner aufgtreten KANN, bzw. so wie der Code ist nicht zu testen ist, habe ich da die Debugausgabe mitgeliefert. Es dürfte doch nicht zu diesen Unterschieden kommen nur wenn ich Threadsafe angeklickt habe, das würde ja alle Sicherheitsmaßnahmen im PRogramm aushebeln.
Also wie gesagt, da dies ein anderes Thema ist und nur zufällig beim selben Code auftaucht der vielleicht noch kürzbar ist (versuche ich noch) sollte der hier bleiben und nicht den anderen der damit nichts zu tun hat vollmüllen.
Sonst müßte ich hier im Forum ja wieder neu posten zum selben Thema nur vorher stunden oder tagelang nachschauen ob und wie ich die anderern Codes so hinbekomme das man sie posten kann.
Klar, mir ist bewußt, das es auch mehr oder minder an meinem Code liegt, deshalb poste ich ja, aber das unterschiedliche Verhalten ist für mich unerklärlich.
Wie geschrieben, werde mal versuchen den Code zu kürzen. So muß jetzt aber erstmal einkaufen und etwas weiter renovieren.
[edit]ich poste hier mal den Text,den ich per PN an "Kaeru Gaman" gesendet habe. "Sollte" ich mal so machen und ich wollte nicht nochmal alles neu "ausdenken" :-)

Na eigendlich siehst du das wirklich nicht ganz richtig. Es stimmt, beide Codes sind im Grunde der selbe, aber im einen Thread geht es mir einfach um die "powerfunktionen". Im anderen, deshalbalb auch das PB4-Forum, geht es mir um was ganz anderes, nämlich um eine unterschiedliche PRogrammausgabe, je nachdem welche Kompilerflags gesetzt sind.

Ich fand es extrem eigenartig (unabhängig davon ob mein Code nun ganz korrekt ist oder nicht), das "getlasterror" korrekt bei mir arbeitet (fehler 259) und NUR wenn auf Threadsafe umgeschaltet wird, der Error nicht gesetzt wird. Ich vermute entweder das es sich um eine BUg handelt oder das durch Threads die Windowsfehlerbehandlung anders funktionier, NUR hier im Code gibt es KEINE Threads. Daher der extra Thread. Kürzen sollte ich den noch um ihn vielleicht nachvollziehbar zu machen, darum ging es mir aber nicht. DIe Ausgaben habe ich daher ja gepostet.

Also noch mal kurz:
-Code baut in beiden Threads auf selben Code auf
-im einen aber geht es um die lauffähigkeit des Codes
-im anderen aber einfach um den "Threadsafe"-Kompilermodus.

Wenn ihr wirklich wollt, das das zusammengefügt wird, bitte, aber das würde 2 total unterschiedliche Dinge zusammen bringen.

Ich hatte ja extra daran gedacht, für Leute die irgendwnn mal das selbe Problem haben und die suche nutzen und dann leichter direkt was zum Problem finden. Hatte mir dabei also schon was gedacht.
Ich fände es daher besser beide Threads so zu belassen, aber wenn nicht, na ja, dann halt nicht Smile

Gruß
Toshy[edit]
Zuletzt geändert von Toshy am 03.02.2007 19:05, insgesamt 1-mal geändert.
1. AMD Athlon II X2 250P,4GB-RAM,WinXP
2. Notebook,500mhz,128MB-RAM,WINXP
3. WHS 2003
Inet: 6Mbit Down/386Kbit Up,Flat
PB4.60
Messenger: Trillian
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nun gut, dann nehmen wir das mal so hin,
aber dann mach das nächste mal so etwas bitte besser kenntlich,
denn so wie es im moment da steht, schreibst du es ginge darum,
dass du deine akku-abfrage nicht hinbekommst.

bring dann also noch andere beispiele,
zumindest mal erzählen, wann so ähnliche fehler noch aufgetreten sind.

und ziehe bitte auch ts' antwort in betracht.
es könnte wirklich sein, dass diese fehler durch einen grundsätzlichen
fehler beim programmieren auftraten, den du eben des öfteren begehst.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Jetzt funktioniert der Code :freak:
GetLastError_() scheint in ThreadSafe nicht zu greifen, also mußte Dir was
anderes ausdenken. PB verwendet intern mit Sicherheit auch diese Funktion.
Auf jeden Fall solltest Du den Code soweit ändern, das er ohne Debugger
Testbar ist. Kann sein, das dieser Effekt nur mit Debugger auftritt (by Design)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Toshy
Beiträge: 710
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

danke ts-soft
HAbe es mal ohne Debugger getestet. Stimmt, dann klappt es.
Liegt also nur daran. Ist aber schon sehr dumm, schließlich läuft der Debugger bei mir ständig und wenn dann das nicht klappt ist es nicht schön. Aber nicht so schlimm.

Eigenartig finde ich nur, daß es nur passiert, wenn man "threadsicher" auswählt.

Danke dir.
1. AMD Athlon II X2 250P,4GB-RAM,WinXP
2. Notebook,500mhz,128MB-RAM,WINXP
3. WHS 2003
Inet: 6Mbit Down/386Kbit Up,Flat
PB4.60
Messenger: Trillian
Gesperrt