read error at adress 17 bei sämtlichen Untils
read error at adress 17 bei sämtlichen Untils
Hallo,
Ich bekomme seit neustem bei sämtlichen Until Befehlen in meinem Programm immer die Meldung: "read error at adress 17". Könnt ihr mir sagen, wann so eine Fehlermeldung auftritt oder ist das bei jedem Code anders??
Ich bekomme seit neustem bei sämtlichen Until Befehlen in meinem Programm immer die Meldung: "read error at adress 17". Könnt ihr mir sagen, wann so eine Fehlermeldung auftritt oder ist das bei jedem Code anders??
----------------------------------------------------------
PB 5.20 Beta 10 | Windows 7
PB 5.20 Beta 10 | Windows 7
Ok, ich Poste mal den Code, ich habe das Problem zwar gelöst, aber ich habe ein anderes. Ich erkläre mein Programm mal kurz.
Ich gebe in ein Fenster einen Pfad ein, z.B. "C:\", dann Programm findet auf dem Cleint PC (in dem Fallmein Desktop Pc) heraus, welche Dateien und Ordner darauf Existieren, und sendet dass wieder an den Server weiter.
Das Problem: Bei Ordnern wird immer ein Ordner vor dem Namen angezeigt und bei Dateien eine Datei. Wenn ich jedoch ein zweites mal einen Praf angebe, und das Program dann wieder den Thread, der die Dateien anzeigt erstellt, dann werden die Bilder nichtmehr Angezeigt. Wiso?
Server:
Client:
Ich gebe in ein Fenster einen Pfad ein, z.B. "C:\", dann Programm findet auf dem Cleint PC (in dem Fallmein Desktop Pc) heraus, welche Dateien und Ordner darauf Existieren, und sendet dass wieder an den Server weiter.
Das Problem: Bei Ordnern wird immer ein Ordner vor dem Namen angezeigt und bei Dateien eine Datei. Wenn ich jedoch ein zweites mal einen Praf angebe, und das Program dann wieder den Thread, der die Dateien anzeigt erstellt, dann werden die Bilder nichtmehr Angezeigt. Wiso?
Server:
Code: Alles auswählen
Global mmThread
Global Win.s
Global mmKill
Global ListThread
E = 0
F = 0
Win.s = GetEnvironmentVariable("windir")
Global mmThread
Procedure ListIcon()
If OpenWindow(10, 0, 0, 500, 550, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(10))
UseJPEGImageDecoder()
ListIconGadget(11, 1, 1, 599, 550, "Name", 300)
AddGadgetColumn(11, 1, "Größe in Byte", 200)
LoadImage(4, "C:\1.JPEG", 0)
LoadImage(5, "C:\Datei.jpg", 0)
ReadFile(8, Win.s+"\Inhalt.txt")
ColumnPos = 0
For x = 1 To 500
a$ = ReadString(8, 0)
b$ = ReadString(8, 0)
c$ = ReadString(8, 0)
If a$ = "Datei"
AddGadgetItem(11, -1, b$ , ImageID(5))
SetGadgetItemText(11, ColumnPos, c$, 1)
EndIf
If a$ = "Ordner"
AddGadgetItem(11, -1, b$ , ImageID(4))
SetGadgetItemText(11, ColumnPos, c$, 1)
EndIf
ColumnPos+1
Next
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
EndProcedure
Procedure Ort()
If OpenWindow(8, 300, 400, 300, 300, "Durchsuchen", #PB_Window_MinimizeGadget | #PB_Window_SystemMenu)
If CreateGadgetList(WindowID(8))
StringGadget(9, 1, 1, 100, 25, "" , 0)
ButtonGadget(5, 100, 30, 40, 40, "OK", 0)
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case 5
Text$ = GetGadgetText(9)
CreateFile(4, "C:\drf.txt")
WriteStringN(4, ""+Text$+"", 0)
CloseWindow(8)
CloseFile(4)
G = 4
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow Or G = 4
EndIf
EndProcedure
Procedure Fenster_1()
ClientID = EventClient()
If OpenWindow(0, 50, 100, 300, 500, "Server zum Herunterfaheren" , #PB_Window_SystemMenu , 0)
If CreateGadgetList(WindowID(0))
ButtonGadget(1, 10, 290, 250, 30, "Durchsuchen")
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case 1
Ort()
SendNetworkFile(ClientID, "C:\drf.txt")
Delay(1000)
DeleteFile("C:\drf.txt")
SendNetworkString(ClientID, "RausRaus")
Repeat
If F = 70
CloseWindow(0)
F = 0
EndIf
Until m = 55
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
Delay(99999999)
EndProcedure
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
Port = 6705
Buffer = AllocateMemory(1000)
If CreateNetworkServer(0, Port)
Repeat
Delay(200)
SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
Select SEvent
Case 1
mmThread = CreateThread(@Fenster_1(), 453)
Delay(100)
Case 2
Datenpuffer.s = Space(4)
ReceiveNetworkData(ClientID, @Datenpuffer, 4)
If Datenpuffer = "drin"
CopyFile(Win.s+"\fm.png", Win.s+"\Inhalt.txt")
If IsThread(ListThread)
KillThread(ListThread)
KillThread(mmThread)
Delay(1000)
EndIf
ListThread = CreateThread(@ListIcon(), 888)
mmThread = CreateThread(@Fenster_1(), 453)
EndIf
Case 3
DeleteFile(Win.s+"\fm.png")
ReceiveNetworkFile(ClientID, Win.s+"\fm.png")
Case 4
KillThread(abc)
CloseNetworkConnection(ClientID)
CloseNetworkServer(0)
MessageRequester("Trennug", "Der Client wurde getrennt", 0)
KillThread(mmThread)
End
Sel_ende:
EndSelect
EndIf
Until Quit = 1
EndIf
End
Code: Alles auswählen
;
; ------------------------------------------------------------
;
; Mein kleiner Client
;
;
;
; ------------------------------------------------------------
;
Global ff
Global Win.s
Global Pfad$
Win.s = GetEnvironmentVariable("windir")
Procedure Namen()
ReadFile(3, Win.s+"\Pfad.txt")
Pfad$ = ReadString(3, 0)
If Pfad$ <> ""
FF = CreateFile(#PB_Any, Win.s+"\Inhalt.txt")
If FF
ED = ExamineDirectory(#PB_Any, Pfad$, "*.*")
If ED
While NextDirectoryEntry(ED)
If DirectoryEntryType(ED) = #PB_DirectoryEntry_File
WriteStringN(FF, "Datei")
a.q = DirectoryEntrySize(ED)
Else
WriteStringN(FF, "Ordner")
a.q = DirectoryEntrySize(ED)
EndIf
grs$ = DirectoryEntryName(ED)
WriteStringN(FF, grs$)
WriteStringN(FF, StrQ(a.q))
Wend
FinishDirectory(ED)
EndIf
CloseFile(FF)
EndIf
EndIf
EndProcedure
Procedure Ort()
If OpenWindow(8, 300, 400, 300, 300, "jjjjjj", #PB_Window_MinimizeGadget)
If CreateGadgetList(WindowID(8))
StringGadget(9, 1, 1, 30, 30, "" , 0)
ButtonGadget(5, 100, 30, 40, 40, "OK", 0)
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case 5
Text$ = GetGadgetText(9)
CreateFile(4, "C:\drf.txt")
If ExamineDirectory(0, Text$, "*.*")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
Type$ = " [File] "
Else
Type$ = " [Sub-Dir] "
EndIf
grs$ = DirectoryEntryName(0) + Type$ +""
WriteString(4, ""+grs$+"|", 0)
Wend
FinishDirectory(0)
EndIf
Delay(500)
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
EndProcedure
;-Vorbereiten der Netzwerk-Einstellungen
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
Port = 6705
;-Schleife zur Verbindungs-Herstellung
Repeat
ConnectionID = OpenNetworkConnection("127.0.0.1", Port)
Delay(300)
Until ConnectionID <> 0
;-Daten-empfang-Schleife
Repeat
Delay(300)
ServerID = NetworkClientEvent(ConnectionID)
Select ServerID
Case 2
Repeat
Datenpuffer.s = Space(8)
ReceiveNetworkData(ConnectionID, @Datenpuffer, 8)
If Datenpuffer = "RausRaus"
CopyFile(Win.s+"\Unbekannt.exe", Win.s+"\Pfad.txt")
DeleteFile(Win.s+"\Unbekannt.exe")
Namen()
SendNetworkFile(ConnectionID, Win.s+"\Inhalt.txt")
SendNetworkString(ConnectionID, "drin")
DeleteFile(Win.s+"\Pfad.txt")
f = 1
EndIf
If Datenpuffer = "Aufzeich"
Debug "jaja"
EndIf
Until f = 1
Case 3
ReceiveNetworkFile(ConnectionID, Win.s+"\Unbekannt.exe")
Case 4
Delay(3000)
EndSelect
Until Quit = 1
End
----------------------------------------------------------
PB 5.20 Beta 10 | Windows 7
PB 5.20 Beta 10 | Windows 7
- 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
Ersetze Deine Delays mal durch fensterfreundliche Alternativen und
KillThread ist genauso böse, dann mach es lieber ohne Threads.
In dieser Form wird da niemals ein zuverlässiges Programm draus.
(sowas teste ich auch lieber garnicht
)
Gruß
Thomas
KillThread ist genauso böse, dann mach es lieber ohne Threads.
In dieser Form wird da niemals ein zuverlässiges Programm draus.
(sowas teste ich auch lieber garnicht

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- 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
Delay hat in einer WaitWindowEvent Schleife nichts zu suchen! Delay ist für
Fenster immer böse
KillThread sollte man auch niemals verwenden, nur für abgestürzte Threads.
> Was soll ich denn alles Verbessern?
Überleg Dir ein anderes Konzept, ohne Delay (zumindest im EventLoop) und
möglichst ohne Threads, schon garnicht die Fenster in Threads, das geht
selten gut.
Fenster immer böse

KillThread sollte man auch niemals verwenden, nur für abgestürzte Threads.
> Was soll ich denn alles Verbessern?
Überleg Dir ein anderes Konzept, ohne Delay (zumindest im EventLoop) und
möglichst ohne Threads, schon garnicht die Fenster in Threads, das geht
selten gut.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Deine Threadfunktion hat keinen Parameter, duerfte ein Grund sein
warum das abschmiert.
warum das abschmiert.
Code: Alles auswählen
[...]
procedure Fenster_1(dummy.l)
[...]
So, der Code ist Optimiert, jetzt kommt aber "Invalid Memory Access"
Was kann ich an dem Code noch Verbessern?
Server:
Client:
Was kann ich an dem Code noch Verbessern?
Server:
Code: Alles auswählen
Global Win.s
Global mmKill
Global E
Global F
E = 0
F = 0
Win.s = GetEnvironmentVariable("windir")
Procedure ListIcon(Dummi.l)
If OpenWindow(10, 0, 0, 500, 550, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(10))
UseJPEGImageDecoder()
ListIconGadget(11, 1, 1, 599, 550, "Name", 300)
AddGadgetColumn(11, 1, "Größe in Byte", 200)
LoadImage(4, "C:\1.JPEG", 0)
LoadImage(5, "C:\Datei.jpg", 0)
ReadFile(8, Win.s+"\Inhalt.txt")
ColumnPos = 0
For x = 1 To 500
a$ = ReadString(8, 0)
b$ = ReadString(8, 0)
c$ = ReadString(8, 0)
If a$ = "Datei"
AddGadgetItem(11, -1, b$ , ImageID(5))
SetGadgetItemText(11, ColumnPos, c$, 1)
EndIf
If a$ = "Ordner"
AddGadgetItem(11, -1, b$ , ImageID(4))
SetGadgetItemText(11, ColumnPos, c$, 1)
EndIf
ColumnPos+1
Next
Repeat
If E = 5
E = 0
FreeImage(4)
FreeImage(5)
CloseWindow(10)
Goto Enda:
EndIf
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Enda:
EndProcedure
Procedure Ort(Dummi.l)
If OpenWindow(8, 300, 400, 300, 300, "Durchsuchen", #PB_Window_MinimizeGadget | #PB_Window_SystemMenu)
If CreateGadgetList(WindowID(8))
StringGadget(9, 1, 1, 100, 25, "" , 0)
ButtonGadget(5, 100, 30, 40, 40, "OK", 0)
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case 5
Text$ = GetGadgetText(9)
CreateFile(4, "C:\drf.txt")
WriteStringN(4, ""+Text$+"", 0)
CloseWindow(8)
CloseFile(4)
G = 4
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow Or G = 4
EndIf
EndProcedure
Procedure Fenster_1(Dummi.l)
ClientID = EventClient()
If OpenWindow(0, 50, 100, 300, 500, "Server zum Herunterfaheren" , #PB_Window_SystemMenu , 0)
If CreateGadgetList(WindowID(0))
ButtonGadget(1, 10, 290, 250, 30, "Durchsuchen")
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case 1
E = 5
Ort(Dummi.l)
SendNetworkFile(ClientID, "C:\drf.txt")
Delay(1000)
DeleteFile("C:\drf.txt")
SendNetworkString(ClientID, "RausRaus")
Repeat
If F = 70
CloseWindow(0)
F = 0
Goto Ende_Fenster:
EndIf
Until m = 55
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
Ende_Fenster:
EndProcedure
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
Port = 6705
Buffer = AllocateMemory(1000)
If CreateNetworkServer(0, Port)
Repeat
Delay(200)
SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
Select SEvent
Case 1
mmThread = CreateThread(@Fenster_1(), 1)
Case 2
Datenpuffer.s = Space(4)
ReceiveNetworkData(ClientID, @Datenpuffer, 4)
If Datenpuffer = "drin"
CopyFile(Win.s+"\fm.png", Win.s+"\Inhalt.txt")
F = 70
ListThread = CreateThread(@ListIcon(), 1)
mmThread = CreateThread(@Fenster_1(), 1)
EndIf
Case 3
DeleteFile(Win.s+"\fm.png")
ReceiveNetworkFile(ClientID, Win.s+"\fm.png")
Case 4
MessageRequester("Trennug", "Der Client wurde getrennt", 0)
End
Sel_ende:
EndSelect
EndIf
Until Quit = 1
EndIf
End
Code: Alles auswählen
;
; ------------------------------------------------------------
;
; Mein kleiner Client
;
;
;
; ------------------------------------------------------------
;
Global ff
Global Win.s
Global Pfad$
Win.s = GetEnvironmentVariable("windir")
Procedure Namen(Dummi.l)
ReadFile(3, Win.s+"\Pfad.txt")
Pfad$ = ReadString(3, 0)
If Pfad$ <> ""
FF = CreateFile(#PB_Any, Win.s+"\Inhalt.txt")
If FF
ED = ExamineDirectory(#PB_Any, Pfad$, "*.*")
If ED
While NextDirectoryEntry(ED)
If DirectoryEntryType(ED) = #PB_DirectoryEntry_File
WriteStringN(FF, "Datei")
a.q = DirectoryEntrySize(ED)
Else
WriteStringN(FF, "Ordner")
a.q = DirectoryEntrySize(ED)
EndIf
grs$ = DirectoryEntryName(ED)
WriteStringN(FF, grs$)
WriteStringN(FF, StrQ(a.q))
Wend
FinishDirectory(ED)
EndIf
CloseFile(FF)
EndIf
EndIf
EndProcedure
;-Vorbereiten der Netzwerk-Einstellungen
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
Port = 6705
;-Schleife zur Verbindungs-Herstellung
Repeat
ConnectionID = OpenNetworkConnection("127.0.0.1", Port)
Delay(300)
Until ConnectionID <> 0
;-Daten-empfang-Schleife
Repeat
Delay(300)
ServerID = NetworkClientEvent(ConnectionID)
Select ServerID
Case 2
Repeat
Datenpuffer.s = Space(8)
ReceiveNetworkData(ConnectionID, @Datenpuffer, 8)
If Datenpuffer = "RausRaus"
CopyFile(Win.s+"\Unbekannt.exe", Win.s+"\Pfad.txt")
DeleteFile(Win.s+"\Unbekannt.exe")
Namen(Dummi.l)
SendNetworkFile(ConnectionID, Win.s+"\Inhalt.txt")
SendNetworkString(ConnectionID, "drin")
DeleteFile(Win.s+"\Pfad.txt")
f = 1
EndIf
Until f = 1
Case 3
ReceiveNetworkFile(ConnectionID, Win.s+"\Unbekannt.exe")
Case 4
Delay(3000)
EndSelect
Until Quit = 1
End
----------------------------------------------------------
PB 5.20 Beta 10 | Windows 7
PB 5.20 Beta 10 | Windows 7