aurelien2723
Messages postés181Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention26 janvier 2011
-
15 janv. 2007 à 13:58
aurelien2723
Messages postés181Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention26 janvier 2011
-
16 janv. 2007 à 08:25
Salut!
Je voudrais réaliser un programme qui permet d'appeler un exécutable à une période définie.
Il faut donc que mon programme n'attende pas la fin de l'autre pour pouvoir continuer à compter le temps.
J'utilises du C++ classique (C++/GCC).
Comment je pourrais faire ceci, sachant que la fonction system() est bloquante...
aurelien2723
Messages postés181Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention26 janvier 20111 16 janv. 2007 à 08:25
Je vais donc récapituler :
Pour appeler un programme extérieur sans rester bloquer, plusieurs solutions :
- appeler le programme à l'aide de ShellExecute :
- ShellExecuteA(0, 0, "programme.exe", "argument", 0, SW_SHOWNORMAL);
- ShellExecute(0, 0, L"programme.exe", L"argument", 0, SW_SHOWNORMAL);
inclure :
#include <windows.h>
#include <shellapi.h>
Cette solution est valable seulement sous Windows.
- créer un thread et lui affecter le nouveau programme à l'aide de la librairie boost :
#include
void uneFonction()
{
boost::thread unThread(&system("mail.exe G150"));
}
Non tester, portable sous toutes les plateformes.
Plus d'infos sur la librairie boost : http://www.boost.org/
aurelien2723
Messages postés181Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention26 janvier 20111 15 janv. 2007 à 15:08
La portabilité ne m'intéresse pas, le programme tournera uniquement sous Windows.
La solution de yoyo me plait, j'avais peur de devoir passer par des for()k et des exec() ....
a peu prêt équivalent au thread quoi...
info je me pencherai peut-etre sur ta solution turnerom, mais qu'est cette classe boost ?
Effectivement yoyo, c'est pas bien ce que j'ai fait, j'ai même pas chercher la définition de la fonction...
Par contre j'ai la même erreur avec l'argument 3 cette fois....
aurelien2723
Messages postés181Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention26 janvier 20111 15 janv. 2007 à 15:43
Je me doutais qu'il me manque quelque chose puisqu'il ne reconnait pas le type WCHAR* ...
Par contre comment faire?
J'ai déjà testé ça :
WCHAR* toto = "mail.exe";
mais le compilo refuse...
ou encore le cast sur la commande :
ShellExecute(NULL, NULL, (WCHAR*)"mail.exe", "G150", 0, SW_SHOWNORMAL);
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 15 janv. 2007 à 21:07
Salut,
On peut même déclarer une chaine unicode sans utiliser wcscpy:
WCHAR text[]=L"mail.exe";
On n'est même pas obligés de la déclarer puisqu'on peut l'utiliser directement dans l'appel de la fonction:
ShellExecute(0, 0, L"mail.exe", L"G150", 0, SW_SHOWNORMAL);
Si on n'a pas besoin des chaines unicode , il est péférable de modifier les propriétés du projet en spécifiant "Non défini" comme jeu de caractères.