Actuellement, j'ai des problèmes avec QTimer. J'essaie de faire en sorte que chaque "Produit" ait une minuterie et ainsi il sera possible à mon "Handler" de savoir que le temps d'enchères du produit est terminé. Le problème que j'ai, c'est que de mon test, il ne semble pas imprimer "Timer a commencé".Utilisation de QTimer & Select. J'ai besoin d'obtenir le temps de vente aux enchères
Cela fait partie de mon projet de programmation de socket. J'utilise select parce que je n'ai pas encore appris le multithreading. Donc, si quelqu'un peut me donner des conseils. My HandleTCPClient est appelée depuis mon serveur lorsqu'un client envoie un message. Merci d'avance.
Product.cpp
#include <string>
using std::string;
#include <iostream>
using std::cout;
#include "Product.h"
Product::Product()
{
seller = "";
itemName = "";
price = 0.00;
min = 0.00;
buyingPrice = 0.00;
time = 0;
description = "";
highestBidder = "None";
currentBid = 0.00;
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(setProductToSold()));
}
void Product::startTimer()
{
cout << " Timer Started " << endl; <<< When called this isn't printed
timer->start(2000, TRUE); // 2 seconds single-shot timer
}
void Product::setHandler(Handler *h)
{
handler = h;
}
void Product::setProductToSold()
{
cout << " Item auction over" << endl;
}
De mon HandleTCPClient:
...
vector <Account> account;
vector <Product *> product;
...
product = checkUser(product,&tempProduct,clntSocket); // check to see if the user is logged in, else can't sell product
output = checkUserSell(clntSocket); // generate a string to see if user is logged in or not
tempProduct.startTimer();
// Start the Timer!!!
Où:
// Push product onto products list
vector <Product *> checkUser(vector <Product *> products, Product * temp, int clntSocket) // generate a new product: check to see if user is logged in or not (2) sell product
{
for (int i=0; i<account.size(); i++)
{
if (account[i].socket == clntSocket) // user is logged in!
{
temp->seller = account[i].name;
products.push_back(temp);
break;
}
}
return products;
}
et ...
string checkUserSell(int clntSocket) // generate a string: check to see if user is logged in or not (2) sell product
{
string output = "2\n<You must first log in if you would like to sell your products>\n<<<TRANSACTION CANCELLED>>>\n";
for (int i=0; i<account.size(); i++)
{
if (account[i].socket == clntSocket) // user is logged in!
{
output = "1\n<Your product has been put up for Auction>\n";
break;
}
}
return output;
}
======================================== =============================================