Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Vad är fel? (pthreads)

Postades av 2007-12-27 16:18:39 - Eric Johansson, i forum c++, Tråden har 2 Kommentarer och lästs av 1614 personer

Får felmeddelande : argument of type `void*(Client::)(void*)' does not match `void*(*)(void*)'
i client.cpp



*client.h*

#pragma once
#include <windows.h>
#include <winsock.h>
#include <pthread.h>
#include <iostream>
#include <signal.h>
#include <stdio.h>
using namespace std;

class Client
{
      private:
              SOCKET sock;
              SOCKET client;
              struct sockaddr_in ser;
	          struct sockaddr addr;
              int port;
	          char i_buffer[256];//in buffer
	          char o_buffer[256];//out buffer
	          u_long b;//1
	          pthread_t in_thread;
	          pthread_t out_thread;
	          int rt,st;
	          WSADATA data;
      public:
             Client();
             ~Client();
             void set_ip(string IP);
             void set_port(int port);
             void * recv_thread(void *);
             void * send_thread(void *);
             void startup();
             void cleanup(); 
};


*client.cpp*
#include "client.h"

Client::Client()
{
      b = 1;
      rt=1;
      st=2;
      ser.sin_family=AF_INET;
      ser.sin_port=2800;
      ser.sin_addr.s_addr=inet_addr("127.0.0.1");
      
}
Client::~Client(){};

void * Client::recv_thread(void *)
{
     bool quit=false;
     int result=0;
     while(quit==false)
	 {
    
        for(int i=0; i < 256; i++)
		{
			i_buffer[i] = '\0';
		}
		
		result=recv(sock,i_buffer,256,0);		//Recive Data
		
		if(result == 0)
		{
			cout << "SOCKET ERROR - DISCONNECTING!" << endl;
			closesocket(sock);
			WSACleanup();
			quit=true;
		}
    }
    pthread_exit(NULL);
}
void * Client::send_thread(void *)
{
     int res=0;
	
	while(true)
	{
		cout << "\n> ";
		gets(o_buffer);
		res = send(sock, o_buffer, strlen(o_buffer), 0);
	}
	pthread_exit(NULL);     
}
void Client::startup()
{
     int res=0;
     memcpy(&addr,&ser,sizeof(SOCKADDR_IN));
     res = WSAStartup(MAKEWORD(1,1),&data);		//Start Winsock
	 /* cout<<"\n\nWSAStartup"
		<<"\nVersion: "<<data.wVersion
		<<"\nDescription: "<<data.szDescription
		<<"\nStatus: "<<data.szSystemStatus<<endl;
		*/
     sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);		//Create the socket
		if(sock==INVALID_SOCKET )
		{
			//cout << "Invalid Socket " << endl;
        }
		else if(sock==SOCKET_ERROR)
		{
			//cout << "Socket Error)" << endl;
        }
		else
		{
			//cout<<"Socket Established"<<endl;
        }
        res=connect(sock,&addr,sizeof(addr));				//Connect to the server
		if(res !=0 )
		{
			//cout << "SERVER UNAVAILABLE" << endl;
		}
		else
		{
			//cout<<"\nConnected to Server: ";
			memcpy(&ser,&addr,sizeof(SOCKADDR));
		}
			
	    ioctlsocket(sock,FIONBIO,&b);

/*FEL PÅ DENNA RAD*/ rt=pthread_create(&in_thread, NULL, send_thread,(void*)NULL);
	    
}
void Client::cleanup()
{
     WSACleanup();
}


Svara

Sv: Vad är fel? (pthreads)

Postades av 2007-12-29 02:17:56 - Niklas Jansson

Helt "enkelt" vad den säger. En funktion

void * f(void* k)

är inte samma sak som en funktion

void * C::f(void* k)


Utan du måste ha exakt en variant av det första slaget. Problemet med det är ju ganska uppenbar. Standardprincipen är att använda sig av mem_fun, men jag är jävligt skeptisk till om det fungerar i det här fallet.

I så fall ska du ändra anropet

rt=pthread_create(&in_thread, NULL, send_thread,(void*)NULL);

till något i stil med:

rt=pthread_create(&in_thread, NULL, mem_fun(&Client::send_thread),(void*)NULL);

Sen ska du fråga dig vilken Client det är som ska anropas... Det känns inte helt hundra. En funktion är alltid en funktion, men en metod beror på vilken klass den är medlem av.

Om inte det funkar får du göra något i stil med att skapa en "separat" funktion som hanterar det.

Och ytterligare ett alternativ, som är lite elegantare, är att försöka använda Thread-klasser istället. Kolla på boost.org för lite najs klasser som skulle kunna funka. Det borde vara det enklaste.


Svara

Sv:Vad är fel? (pthreads)

Postades av 2008-01-02 23:58:04 - Eric Johansson

Tackar, har nu kringått problemet...
=)


Svara

Nyligen

  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino
  • 14:15 Indian online casino
  • 08:28 Butiksskyltar: Hur upplever utbude

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 868
27 965
271 770
396
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies