Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Multithreading in C++

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    6

    Multithreading in C++

    Ciao a tutti,

    allego una piccola porzione di codice C++ relativa alla creazione di un thread all'interno di una classe.

    #define UNICODE
    #define _UNICODE
    #define _MT
    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <process.h>
    #include <iostream>
    #include "stdafx.h"
    using namespace std;

    class ClientThread
    {
    public:
    static unsigned __stdcall RunWrapper(void * );
    void Run();

    };

    static unsigned __stdcall RunWrapper(void * pThis)
    {
    ClientThread * pthX = (ClientThread *)pThis;
    pthX->Run();
    return 1;
    }

    void ClientThread::Run()
    {
    cout << "Client thread is running..." << endl;
    }

    int _tmain(int argc, _TCHAR* argv[])
    {

    HANDLE tref;
    DWORD dwID;
    tref = (HANDLE)_beginthreadex(NULL, 0, ClientThread::RunWrapper, NULL, 0, NULL);
    cout << "Client thread started..." << endl;
    return(0);
    }


    Note:
    - Il wrapping della funzione eseguita dal thread, come documentato in molti forum/tutorial (ad esempio http://www.codeproject.com/KB/threads/krunner.aspx) è necessario.
    - La libreria LIBCMT.LIB è inclusa.

    L'output della compilazione/linking è il seguente :

    "error LNK2019: unresolved external symbol "public: static unsigned int __stdcall ClientThread::RunWrapper(void *)" (?RunWrapper@ClientThread@@SGIPAX@Z) referenced in function _wmain"

    ...qualche suggerimento?
    grazie!

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Ma la classe dov'e?
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    6
    al momento tutto il codice che ho allegato è in un unico file ClientThread.cpp

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    E qual'e' tutto il codice della classe?
    Per gli Spartani e Sparta usa spartan Il mio github

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    6
    il codice che ho allegato è già tutto il codice contenuto in ClientThread.cpp

  6. #6
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Scusa il linker che ti dice ? manca ClientThread::RunWrapper, io avrei detto anche altro cmq
    Per gli Spartani e Sparta usa spartan Il mio github

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    codice:
    unsigned __stdcall ClientThread::RunWrapper(void * pThis)
    {
        ClientThread * pthX = (ClientThread *)pThis;
        pthX->Run();
        return 1; 
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    6
    è necessario che RunWrapper sia static, vedi http://www.codeproject.com/KB/thread...gTutorial.aspx paragrafo "Using a C++ Member Function as the Thread's Entry-Point-Function"

    Così:

    int _tmain(int argc, _TCHAR* argv[])
    {

    HANDLE tref;
    DWORD dwID;

    tref = (HANDLE)_beginthreadex(NULL, 0, RunWrapper, NULL, 0, NULL);

    cout << "Client thread started..." << endl;
    return(0);
    }

    il linker non dà problemi, ma il thread non dà segni di vita :-(

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    6
    risolto: il thread è vivo e vegeto, avevo solo problemi nel visualizzarne l'output (con cout non vedevo nulla)

    grazie mille

  10. #10
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    A mio avviso manca anche l'oggetto ClientThread
    naaa hai capito a questo? zzzz e che faccio io oggi
    Per gli Spartani e Sparta usa spartan Il mio github

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.