C++でのスレッドを閉じるために助けが必要ボタン(Qt -> QPushButton
)で、関数(pause()
)を呼び出し、running
をfalse
に設定する必要があります。は、私は、この条件でのスレッド内でループを行う必要がある
マイスレッドのコードは次のようになります。それはpause()
メソッドがfalseにrunning
を設定し、糸のループを停止することがある
class CServeurTcp;
struct thread_param_client{
CServeurTcp* cli;
SOCKET soc;
BluetoothThread *_bt;
};
class CServeurTcp
{
private:
SOCKET client;
int erreur, emis, recus;
bool running;
DWORD ClientThread(SOCKET, BluetoothThread*);
string salle;
Vigenere *cryp;
BluetoothThread *_bth;
public:
CServeurTcp(string, unsigned short, string, BluetoothThread*);
~CServeurTcp();
int pause();
static DWORD WINAPI ThreadLauncher_client(void *p)
{
struct thread_param_client *Obj = reinterpret_cast<struct thread_param_client*>(p);
CServeurTcp *s = Obj->cli;
return s->ClientThread(Obj->soc,Obj->_bt);
}
};
、しかし:
DWORD CServeurTcp::ClientThread(SOCKET soc, BluetoothThread *_bt)
{
ifstream fichier("test.txt", ios::in);
string ligne, mess_crypt, donnees, cut;
int compteurReception = 0;
if(fichier)
{
while(running)
{
if((_bt->getReception() != 0)&&(compteurReception != _bt->getReception()))
{
compteurReception = _bt->getReception();
getline(fichier, ligne);
cut = ligne.substr (0,12);
cryp->vigenere_crypter(cut,mess_crypt,"VIGE");
donnees = salle + " - " + mess_crypt;
emis = send(soc, donnees.c_str(), strlen(donnees.c_str()), 0);
if(emis == SOCKET_ERROR)
Affiche_Erreurs(WSAGetLastError());
else
cout << "Nombre de caracteres envoyes: " << strlen(donnees.c_str()) << endl;
}
Sleep(1000);
}
fichier.close();
}
else
cout << endl << "Impossible d'ouvrir le fichier !" << endl;
ExitThread(0);
return 0;
}
ここではクラスでありますdid not work ... これを達成するにはどうすればいいですか?
(私はpause()
を呼び出すときにそれを閉じるために糸のループを閉じる)
おかげ
ミューテックスなどは知っていますか? – deviantfan
絶対にそうではありません: – Adson
次に、次に学ぶべきことが分かっています:)それはスレッドに関する問題の1つです。 – deviantfan