|
You last visited: Today at 18:56
Advertisement
Vb.Net String für multithreading?
Discussion on Vb.Net String für multithreading? within the General Coding forum part of the Coders Den category.
11/22/2011, 14:39
|
#1
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
Vb.Net String für multithreading?
Hey, ich habe einen socket server mit multithreading und setze nach Class ein paar sachen wie z.b.
Dim paketcommand2 as string = vbnullstring
ich greife mit einem multithreading thread darauf zu und dann kommt immer
Code:
Das ActiveX-Steuerelement 248dd896-bb45-11cf-9abc-0080c7e7b78d kann nicht instanziiert werden, da der aktuelle Thread kein Singlethread-Apartment ist.
wie kann ich das ändern ohne es in jede Sub reinzuschreiben? da ich dort auch sachen gesetzt habe die von mehreren subs zugegriffen werden
|
|
|
11/22/2011, 15:46
|
#2
|
elite*gold: 3
Join Date: Dec 2009
Posts: 969
Received Thanks: 314
|
wenn meine antwort falsch ist bitte nicht böse sein ^^
Weiss nicht ganz was du möchtest, aber:
Evt. deklarierst du die variable einfach schon von anfang an global?
|
|
|
11/22/2011, 15:53
|
#3
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
Public Class main
Public paketcommand2 as string = vbnullstring
und dann die subs
ich will es auch so lassen theoretisch da ich nicht in jede sub das ändern will da es veradmmt viele sind
|
|
|
11/22/2011, 16:20
|
#4
|
elite*gold: 0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,810
|
Wie greifst du denn auf die Klasse und Variable zu? Kannst du mal ein bisschen mehr davon rauskopieren oder ein kleines Beispiel posten?
|
|
|
11/22/2011, 16:25
|
#5
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
Code:
Private Sub Connectionlisten()
While True
client = server.AcceptTcpClient
Dim c As New Connection
c.stream = client.GetStream
c.streamr = New StreamReader(c.stream)
c.streamw = New StreamWriter(c.stream)
Dim data As Object = ""
Data = c.streamr.ReadLine
data = StringToHex(data)
Dim Paket As String = vbNullString
Dim PaketBoolean As Boolean = True
While (PaketBoolean)
Paket = ClientPaketBearbeitung(data)
data = Replace(data, Paket, "")
If (Len(data) = 0) Then
PaketBoolean = False
End If
'/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\'
'Reading client info'
Dim readnames As New Read("Client", Paket)
Dim Charname2 As String = vbNullString
Dim charname3 As String = vbNullString
Dim accname As String = vbNullString
Dim PaketCommand2 As String = vbNullString
readnames.ReadByte()
readnames.ReadInt()
readnames.ReadInt()
readnames.ReadInt()
readnames.ReadInt() '28-34'
PaketCommand2 = readnames.ReadInt()
If (PaketCommand2 = "00FF0000") Then
readnames.ReadInt()
readnames.ReadInt()
readnames.ReadInt()
readnames.ReadInt()
readnames.ReadInt()
readnames.ReadInt()
Charname2 = readnames.ReadString
accname = readnames.ReadString
charname3 = readnames.ReadString
ClientListBoxAdd("Info", "IP: " & ClientToServerWorld.RemoteHostIP & " Account: " & HexToString(charname3) & " Char: " & HexToString(accname))
End If
'End Reading client info'
'/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\'
Console.WriteLine("Account: " & c.acc & "Character: " & c.nick)
End While
list.Add(c)
Dim t As New Threading.Thread(AddressOf ListenToConnection)
t.Start(c)
End While
End Sub
|
|
|
11/22/2011, 16:30
|
#6
|
elite*gold: 0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,810
|
Also die ganzen anderen Sachen kannste ruhig weglassen, so hat doch niemand Lust sich alles durchzulesen. Wo genau kommt denn der Fehler? Das ganz unten Dim t As New...?
|
|
|
11/22/2011, 16:32
|
#7
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
Nein mit der sub greife ich nur auf paketcommand2 = vbnullstring drauf zu der fehler kommt hier
Public Class main
Dim paketcommand2 as string = vbnullstring <-
|
|
|
11/22/2011, 20:10
|
#8
|
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 572
|
Ein string ist kein Active X Steuerelement, und daher hast du deinen fehler falsch lokalisiert
Tritt der fehler direkt beim start auf oder erst im laufe des programms?
wenn 2teres mit debuggen versucht?
benutzt du active x steuerelemente?
btw: Dim readnames As New Read("Client", Paket) kenne ich gar nicht
|
|
|
11/22/2011, 20:12
|
#9
|
elite*gold: 0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,810
|
Quote:
Originally Posted by warfley
btw: Dim readnames As New Read("Client", Paket) kenne ich gar nicht
|
Wahrscheinlich eigene Klasse?
|
|
|
11/22/2011, 20:18
|
#10
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
es hat vor multithreading mit winsock funktioniert so habe nur auf socket mit multithreading umgestellt.
Quote:
Originally Posted by xKraizy
Wahrscheinlich eigene Klasse?
|
*** habe mir dort sachen für paket analysing programmiert und angelegt
|
|
|
11/22/2011, 21:29
|
#11
|
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 572
|
Quote:
*** habe mir dort sachen für paket analysing programmiert und angelegt
|
finde ich iritierend, denn read ist ein schlüsselwort in vielen sprachen, und auch soweit ich weiß in alten VB versionen, außerdem ist das auch nicht ganz norm konform.
Also nochmal zu deiner fehlermeldung:
Du hast eine Active X Komponente, die multithreading, zumindest so wie du es anwendest, nicht unterstützt. Daher tippe ich darauf, das es sich dabei um die Winsocks handelt.
Also verwende doch besser die .Net Socket klassen, anstatt den winsocks
|
|
|
11/22/2011, 21:53
|
#12
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
ich benutzte ja die socket klasse da ich winsocks jetz aus meinem source rausschmeioßen will.
SO
hab jetz mal alles was die connection braucht in jede sub definiert und nun kommt das
Public Version As String = "1.2"
Code:
Das ActiveX-Steuerelement 248dd896-bb45-11cf-9abc-0080c7e7b78d kann nicht instanziiert werden, da der aktuelle Thread kein Singlethread-Apartment ist
obowhl die connection garnicht auf version zugreift
|
|
|
11/23/2011, 16:40
|
#13
|
elite*gold: 0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,810
|
Kannst du mal das Projekt (oder ein Stück davon) hochladen?
|
|
|
11/24/2011, 19:36
|
#14
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
ich has nun rausgefunden. es liegt daran das ich eine cmd und eine form zusammen benutze und den code in der form habe und diese nicht für multithreading geht.
|
|
|
|
Similar Threads
|
[C++] D3D Multithreading
08/24/2011 - C/C++ - 0 Replies
Sry kann closed werde.
MfG
|
[VB08]String in String mit mehreren Funden
08/08/2011 - .NET Languages - 6 Replies
Hey,
bin gerade auf ein Problem gestoßen, an dem ich mir seit 3 Stunden die Zähne ausbeiße.
Ich will eine Funktion schreiben, die der _StringBetween Funktion von AutoIt gleich ist. _StringBetween gibt in einem Array alle Strings zwischen zwei SubStrings und dem ganzen String aus. Die Ausgabe bei
_StringBetween("<h1>test1</h1>&l t;h1>test2</h1>", "<h1>", "</h1>") wäre also idealer Weiße ein Array (x = "test1", x = "test2")...
da man in VB08 kein Array returnen kann, komme ich aber einfach...
|
Multithreading
03/17/2010 - AutoIt - 16 Replies
$handle = DllCallbackRegister("_Threadstart"," ;int","ptr")
$handlr = DllCallbackRegister("_Threadstard"," ;int","ptr")
$dll = DllStructCreate("Char;int")
DllStructSetData($dll,1,"hi")
DllStructSetData($dll,2,1234)
$ret = DllCall("kernel32.dll","hwnd", "CreateThread","ptr",0,"d word",0,"long",DllCallbackGetPtr($h andle),"ptr",DllStructGetPtr($dll)," ;long",0,"int*",0)...
|
C++ Multithreading + Klassen
01/16/2010 - C/C++ - 8 Replies
Mein Problem ist es , dass ich eine Klasse habe (nehmen wir als Beispiel Auto)
und eine Funktion (Beispiel : BremswegBerechnen) habe , die aber in einem extra Thread laufen soll . Also so in etwa :
.
.
.
int main()
{
CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)BM W.BremswegBerechnen, 0, 0, 0);
|
All times are GMT +2. The time now is 18:56.
|
|