Gå til innhold

Anbefalte innlegg

Hei!

Driver å lager et socket(win32) interface mellom to programmer, men får å få dette til å funke bra så trenger jeg tråder, noe jeg ikke er veldig flink med for å være ærlig.

 

Har lagd en Thread.h fil som ser sån ut:

template<class T, class P>
class Thread
{
private:
typedef void (T::*ThreadFunc)( P );
public:
Thread();
virtual ~Thread();

void Suspend();

void Resume();

void Terminate();

bool IsThreadActive() const;

bool Run( T* pClass, ThreadFunc pfFunc, P p );
};

 

Den kompilerer helt fint, men når jeg prøver å lage en thread:

class ClientSocket
{
private:
  ...
  Thread<ClientSocket,int>m_thread;

 

Så får jeg følgende link error`s:

[iLINK32 Error] Error: Unresolved external 'Thread<ClientSocket, int>::~Thread<ClientSocket, int>()' referenced from C:\...\PROJECTS\DEBUG\CLIENTSOCKET.OBJ

[iLINK32 Error] Error: Unresolved external 'Thread<ClientSocket, int>::Thread<ClientSocket, int>()' referenced from C:\...\PROJECTS\DEBUG\CLIENTSOCKET.OBJ

 

Hvis jeg kommenterer ut "Thread<ClientSocket,int>m_thread;" så kompilerer det fint, men jeg sitter igjen uten tråder.

 

Hva gjør jeg feil ?

Endret av BlueDude
Lenke til kommentar
Videoannonse
Annonse

Problemet ditt er at det holder ikke å bare lage en header fil. Du må også ha en implementasjon et sted, vanligvis i en .cpp fil med tilsvarende navn. Du trenger heller ikke skrive thread klasser selv, disse finnes allerede i APIene til de fleste operativsystemer.

Lenke til kommentar

For å ta det enkle først har du en konstruktor og destruktor?

 

Ellers så vil jeg si at Thread klassen veldig god ut.

Kan ikke si at jeg skjønte hva du mener her men...

 

trenger ikke lage thread klasser selv, disse finnes allerede i APIene

Noen som vet om en god api for windows ?

Muligens også en som er cross-platformed som er enkel å implementere.

Lenke til kommentar

Det er inkludert i Windows APIet. Fant noe informasjon på http://www.codeproject.com/KB/threads/MultithreadingTutorial.aspxm og http://msdn.microsoft.com/en-us/library/ms682516%28v=VS.85%29.aspx. Du finner mer om du søker på google.

 

Fikk page not found på coedproject.com linken din, prøvde meg på å lage threads som gjort i msdn linken. Men får ikke dreiesen på parameterene til CreateThread()

Min kode:

WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int nShowCmd){
  DWORD dwThread;
  HANDLE hThread;
  ClientSocket* cs = new ClientSocket;
  hThread = CreateThread(NULL,0,&cs->main(),NULL,0,&dwThread);
  ...
}

 

ClientSocket.cpp:

   DWORD WINAPI ClientSocket::main(LPVOID lParam){
while(1){
    cout<<"Kjører Thread";
           sleep(5000);
    }

 

Får følgende error på linjen med CreateThread med &cs->main()i fokus:

 

[bCC32 Error] Project1.cpp(27): E2027 Must take address of a memory location

 

Hvis jeg fjærner "&" tegnet så får jeg:

 

[bCC32 Error] Project1.cpp(27): E2342 Type mismatch in parameter 'lpStartAddress' (wanted 'unsigned long (__stdcall *)(void *)', got 'unsigned long')

Lenke til kommentar

http://www.codeproject.com/KB/threads/MultithreadingTutorial.aspx skal det være.

CreateThread tar en adresse til en funksjon som parameter. Det du gjør er å sende resultatet av cs->main() metoden som antageligvis ikke er det du vil. Du kan uansett ikke sende en klassefunksjon som ikke er statisk som parameter. Så for at det skal bli riktig må cs->main være statisk og du skal ikke ha med & foran. Det står mer om hvordan du kan bruke klassemetoder på codeproject.com,

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...