Hej, igen. Jeg har siddet og stirret på den samme linje kode i 30 minutter nu, giver op nu. Jeg kan ikke finde ud af hvad jeg gør forkert!
Jeg er igang med at lave et interface til threads, så jeg kan benytte dem noget nemmere fremover, men min compiler bliver ved med at komme med denne fejl:
/media/svendEkstern/c++/threadclass/thread.cpp|21|error: argument of type ‘void* (thread::)(void*)’ does not match ‘void* (*)(void*)’|
Her er mine 4 forskellige filer:
main.cpp
#include "main.h"
#include "thread.h"
void threadprocedure(string str)
{
cout << str;
sleep(1);
}
int main()
{
string text1 = "hello ";
thread helloThread;
helloThread.setParameter("Hello ");
helloThread.bind(threadprocedure);
helloThread.run();
sleep(10);
helloThread.stop();
helloThread.remove();
return 0;
}
main.h
#include <iostream>
#include <string>
using namespace std;
#if defined(__linux__)
#include <unistd.h> //The sleep function is in this header
#elif defined (__WIN32__)
#include <windows.h> //Almost everything is in the windows.h header
#define sleep(x) Sleep(1000*x) //This makes the linux and windows sleep function act the same way.
#endif
thread.cpp
#include "thread.h"
using namespace std;
#if defined(__linux__)
thread::thread()
{
running = false;
parameter = "";
}
void thread::setParameter(string par)
{
parameter = par;
}
void thread::bind(void(*callback)(std::string))
{
pthread_create(&Thread,NULL,thread::threadProcedure, ¶meter);
//pthread_create(&helloThread,NULL,threadProcedure,&hello);
}
void thread::stop()
{
running = false;
}
void thread::run()
{
running = true;
}
void thread::remove()
{
}
void * thread::threadProcedure(void * parameter)
{
while(running)
{
}
return 0;
}
#elif defined(__WIN32)
void thread::bind(void(*callback)(std::string), string str)
{
}
void thread::stop()
{
}
void thread::run()
{
}
void thread::remove()
{
}
#else
#error unsupported OS
#endif
thread.h
#include <iostream>
#include <string>
using namespace std;
#if defined(__linux__)
#include <pthread.h> //All the thread-stuff is in this header
#elif defined (__WIN32__)
#include <windows.h> //Almost everything is in the windows.h header
#endif
class thread
{
public:
void stop();
void run();
void remove();
void setParameter(string par);
void bind(void(*callback)(std::string));
thread();
private:
void * threadProcedure(void * parameter);
bool running;
string parameter;
#if defined(__linux__)
pthread_t Thread;
#elif defined(__WIN32)
HANDLE Thread;
#endif
};
Jeg sidder lige nu på Ubuntu, og derfor er der ikke lavet noget på windows koden endnu.
Indlæg senest redigeret d. 03.05.2010 21:21 af Bruger #14210