uruchomienie odzielnej aplikacji
Co to znaczy dokładnie, że aplikacja jest konsolowa?fxBobi pisze:Aplikacja jest konsolowa. Jeśli uruchamiam aplikacje ręcznie wszystko jest w porządku. Pojawia się okienko konsoli i wykonywany jest algorytm.
Ta aplikacja to plik wykonywalny czy może jakiś skrypt .bat lub .cmd ?
W tym drugim przypadku uruchomić trzeba ją ciutkę inaczej ......
Druga sprawa: jeśli jako drugi parametr do WinExec podajesz 0 to nie dziw się, że "nic się nie dzieje". 0 oznacza, że okno aplikacji ma zostać ukryte. Podaj tam 1 albo 5.
Jeśli obie aplikacje będą korzystać z tego samego pliku to konflikt oczywiście może się zdarzyć. Można z tym sobie radzić na różne sposoby: najlepiej poprzez synchronizację dostępu do zasobu (mutex lub event) albo prościej: obsługując błędy przy otwarciu pliku i próbując otworzyć go do skutku (druga aplikacja musi w końcu go zwolnić).
Można jeszcze ShellExecute
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Przykład
http://www.pptfaq.com/FAQ00479.htm
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Przykład
http://www.pptfaq.com/FAQ00479.htm
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Konsola tak jak powyzej napisal Tigr, przyklad w mql4:fxBobi pisze:Czy mogę was prosić jeszcze o pomoc?
Aplikacja jest konsolowa. Jeśli uruchamiam aplikacje ręcznie wszystko jest w porządku. Pojawia się okienko konsoli i wykonywany jest algorytm.
Kod: Zaznacz cały
#define SW_HIDE 0 //0-ukryte okno,1-pokaz okno
#import "shell32.dll"
int ShellExecute(int hWnd,int lpVerb,string lpFile,string lpParameters,int lpDirectory,int nCmdShow);
#import
ShellExecute(0,0,"aplikacja.exe","-jakis parametr aplikacji",0,SW_HIDE);
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Jeszcze w tej pierwszej metodzie wpisałem 4 i się aplikacja uruchamiała ale gdy napisałem inny program (w konsoli) i zmieniłem ścieżkę to aplikacja sie nie uruchamia.
Wyszko wygląda mniejwiecej tak .
Wyszko wygląda mniejwiecej tak .
Kod: Zaznacz cały
//#import "kernel32.dll"
//int WinExec(string NameEx, int dwFlags);
//#import
#define SW_HIDE 1 //0-ukryte okno,1-pokaz okno
#import "shell32.dll"
int ShellExecute(int hWnd,int lpVerb,string lpFile,string lpParameters,int lpDirectory,int nCmdShow);
#import
int start()
{
Comment(TerminalPath());
//string appPath = "c:\Program Files\CCleaner\test.exe";
//WinExec(appPath,1);
ShellExecute(0,0,"c:\Program Files\CCleaner\ccleaner.exe",NULL,0,SW_HIDE);
return(0);
}
Komentarzami odznaczyłem pierwszą funkcje której aktualnie nie stosuje .Ale i ta pierwsza funkcja jak napisałem wyżej po zmianie parametru przy appPath zadziałała.
luktom pisze:Poprzez TerminalPath() możesz odczytać katalog bieżącej instancji MT4.
A co do ścieżki do aplikacji to zwróć uwagę, czy nie zawiera spacji, a jeśli tak to escape'uj całą ścieżkę w dodatkowe " " i \.
Kod: Zaznacz cały
string appPath = ""C:\\Program files\\Terminal\\experts\\app.exe""; WinExec(appPath,0);
Kod: Zaznacz cały
string appPath = "c:\\Program Files\\CCleaner\\test.exe";
Kod: Zaznacz cały
""c:\\Program Files\\CCleaner\\test.exe""
Kod: Zaznacz cały
\
I na początek użyj SW_SHOW lub SW_SHOWNORMAL :
Kod: Zaznacz cały
ShellExecute(0,0,"c:\\Program Files\\CCleaner\\test.exe",NULL,0, /*->*/ SW_SHOW);
Nie spiesz się , zawsze zdążysz stracić .
Nie udało mi się uruchomić oddzielnej aplikacji przez MT4.
Wiec tymczasowo(będę jeszcze próbował) zrobiłem to na eksport danych do pliku.
Aplikacja C++ w danym odcinku czasowym sprawdza zawartość pliku.Wiec nie obawiam sie że dojdzie do konfliktu między MT4 a programem. Tylko nie wiem dlaczego tak prosta aplikacja korzysta z 100% CPU
Co bardzo mi spowalnia PC .
Co może być powodem ?
Nie jestem teoretykiem wiec program ma na celu wyłączenie PC jest napisany w Dev C++ w aplikacji konsolowej.
W kodzie użyłem funkcji moze to jest powodem ?
Może ona spowalnia , chociaż zastopiłem to Sleep() z biblioteki windows.h i efekt jest taki sam .
Wiec tymczasowo(będę jeszcze próbował) zrobiłem to na eksport danych do pliku.
Aplikacja C++ w danym odcinku czasowym sprawdza zawartość pliku.Wiec nie obawiam sie że dojdzie do konfliktu między MT4 a programem. Tylko nie wiem dlaczego tak prosta aplikacja korzysta z 100% CPU
Co bardzo mi spowalnia PC .
Co może być powodem ?
Nie jestem teoretykiem wiec program ma na celu wyłączenie PC jest napisany w Dev C++ w aplikacji konsolowej.
W kodzie użyłem funkcji moze to jest powodem ?
Kod: Zaznacz cały
void pause ( int liczba_sekund )
{
clock_t a;
a = clock () + liczba_sekund * CLOCKS_PER_SEC ;
while (clock() < a) {}
}
Taka funkcja nie nadaje się.
W pętlach stosuje się Sleep()
Parametr określa czas wstrzymania wątku w milisekundach
pozwala na oddanie czasu procesora innym wątkom .
Wystarczy Sleep(2) ..
W pętlach stosuje się Sleep()
Kod: Zaznacz cały
VOID Sleep(
DWORD dwMilliseconds // sleep time in milliseconds
);
pozwala na oddanie czasu procesora innym wątkom .
Wystarczy Sleep(2) ..
Niemożliwe , może masz jeszcze jakąś pętlę ?Może ona spowalnia , chociaż zastopiłem to Sleep() z biblioteki windows.h i efekt jest taki sam .
Nie spiesz się , zawsze zdążysz stracić .