Чтобы создать QThread, вы должны реализовать класс, унаследованный от QThread.Пример, взятый из документации QT
class MyThread : public QThread
{
public:
void run();
};
void MyThread::run()
{
QTcpSocket socket;
// connect QTcpSocket's signals somewhere meaningful
...
socket.connectToHost(hostName, portNumber);
exec();
}
И скрытый в вашей реализации будет:
result OS_createThread (
pointer to thread handle (set after thread is created),
stack size,
function to run,
pointer to parameters,
priority )
{
MyThread *thread = new MyThread(size, function, parameters, prio);
thread->start();
return thread;
}
Таким образом, ваш метод интерфейса C будет создавать экземпляр такогокласс для каждого запрашиваемого потока.Затем этот класс должен хранить все соответствующие данные, переданные из вашей функции, в переменных-членах.Функция потока, которая должна быть выполнена, будет вызвана в методе run()
.Поскольку кажется, что вы выполняете только методы на языке C, я не вижу проблем с сохранением указателя на них в переменной класса (пожалуйста, исправьте меня, если я ошибаюсь - еще не пробовал;).
Однако, егона самом деле это немного сложнее, потому что кому-то придется освободить память, созданную для переменной thread
.И это не легко (из интерфейса C) возможно с моим примером.Так что вы можете подумать об использовании внутреннего класса менеджера или чего-то такого, что обрабатывает созданные потоки и уничтожает их по мере необходимости.Однако для того, чтобы сделать квалифицированное заявление о том, как вы можете этого добиться, мне понадобится немного больше информации;)