30. januar 2008 - 17:52Der er
7 kommentarer og 1 løsning
Lave tråd som kan pille ved member variabler
Hej!
Jeg er i gang med et chatprogram som er skrevet i _Visual_ C++ som bruger et Instant Messaging bibliotek skrevet i ren C++.
Når jeg har connected til den host jeg vil chatte med skal jeg køre en medlemsfunktion i instansen af IM-librariet. Den skal køres i en uendelig loop, og jeg lagde i min uvidenhed først loopen ind i en GUI-funktion, men efter lidt research har jeg fundet ud af at programmet bare stopper med at svare p.g.a. af løkken stopper kørslen af hovedloopen.
Jeg har derfor fundet ud af at jeg skal lave en tråd til, som handler denne loop.
Jeg kan bare ikke finde ud af den rigtige syntax til CreateProcess, så dens "body" er en member funktion af min Visual C++ GUI form klasse.
Det svære er bare at kode det på den rigtige måde. Lige nu har jeg: DWORD threadId; HANDLE hThread; hThread = CreateThread( NULL, 0, &WaldorfChat::Form1::ListenForRecvs, NULL, 0, &threadId );
som giver en warning og en error:
warning C4441: calling convention of '__stdcall ' ignored; '__clrcall ' used instead
error C3374: can't take address of 'WaldorfChat::Form1::ListenForRecvs' unless creating delegate instance
Håber på at i forstår mit spm:) Det er lidt svært at beskrive, så bare spørg hvis der er noget der er uklart.
Tak for svaret. Jeg kan se at det var det jeg bad om, men jeg har nu fundet ud af at Windows Forms Controls __ikke__ er trådsikre, så deres metoder kan kaldes fra den tråd der lavede dem.
Og GUI i C# der bruger lib i C++ vil nok være nemmere - ikke så meget p.g.a. sproget men du finder 10000 gange så mange eksempler til win forms i C# som i C++ !
Well.. Så er jeg så kommet tilbage til eksperten efter en del tids pause - mailbotten har åbenbart ikke virket, men jeg vil gerne have lukket de spm. jeg ikke har fået lukket endnu, så smid et svar!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.