Каждый раз, когда возможный я использую ссылки по указателям. Причина этого состоит в том, что намного более трудно завинтить ссылку, чем указатель. Люди могут всегда передавать ПУСТОЙ УКАЗАТЕЛЬ значению указателя, но нет такого эквивалента ссылке.
единственная реальная оборотная сторона является там параметрами ссылки в C++, имеют отсутствие документации сайта вызова. Некоторые люди полагают, что это мешает понимать код (и я соглашаюсь до степени). Я обычно определяю следующее в своем коде и использую его для поддельной документации сайта вызова
#define byref
...
someFunc(byref x);
, Это, конечно, не осуществляет документацию сайта вызова. Это просто обеспечивает очень хромой способ зарегистрировать его. Я сделал некоторое экспериментирование с шаблоном, который осуществляет документацию сайта вызова. Это больше для забавы, чем для фактического производственного кода все же.
http://blogs.msdn.com/jaredpar/archive/2008/04/03/reference-values-in-c.aspx
Я нашел способ решить свой вопрос, скомпилировал следующий код c и назвал вывод exe как runjob.exe, а затем в файле ловушки bat, используйте "runjob another_prog", теперь это ок.
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
int _tmain()
{
char * pCmd = ::GetCommandLine();
// skip the executable
if (*pCmd++ == L'"')
{
while (*pCmd++ != L'"');
}
else
{
while (*pCmd != NULL && *pCmd != L' ')
++pCmd;
}
while (*pCmd == L' ')
pCmd++;
STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
ZeroMemory( &pi, sizeof(pi) );
// Start the child process.
BOOL result = CreateProcess
(
NULL, // No module name (use command line)
pCmd, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set bInheritHandles to FALSE
DETACHED_PROCESS, // Detach process
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi // Pointer to PROCESS_INFORMATION structure (returned)
);
if (result) return 0;
char msg[2048];
FormatMessage
(
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
::GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),
msg, sizeof(msg),
NULL
);
fputs(msg, stderr);
_flushall();
return -1;
}
Не могли бы вы использовать интерфейс командной строки планировщика задач Windows "schtasks / run" для запуска задания, которое запускает "another_prog"? Вам придется создавать работу заранее. Раньше также существовала программа «СКОРО» с Windows (NT) Resource Kit, которая создавала динамические записи для планировщика команд «AT», чтобы запустить задание за несколько минут, которое не требовало бы предварительной настройки задания, его все еще можно найти, немного поискав.
Что вы можете сделать, так это создать запланированную задачу, которая выполняет пакетный сценарий или другой исполняемый файл, который выполняется в течение длительного времени. Установите его на запуск один раз в прошлом и не настраивайте его на удаление задачи, когда больше не запланировано запусков. Затем в вашем сценарии перехвата Subversion введите следующую строку:
schtasks /run /tn NameOfYourTaskHere
Я подтвердил тестом, запустив запланированную задачу Notepad ++, и исполняемый файл Notepad ++ появился как дочерний для svchost.exe, а не как окно cmd.exe, которое я выполнил команду schtasks
из.
Синхронный. Второй блокнот не запустится, пока вы не закроете первый.
notepad.exe c:\temp\a.txt
notepad.exe c:\temp\b.txt
Асинхронный: второй блокнот запустится, даже если вы не закрыли первый.
start notepad.exe c:\temp\a.txt
start notepad.exe c:\temp\b.txt
Подробнее о команде запуска:
http: // www.robvanderwoude.com/ntstart.php[125 visibleEDIT: следующий комментарий был сделан в другом месте @zhongshu, оригинальным автором. Я только копирую его здесь:
start cmd / c не работает, потому что SVN хук после фиксации будет ждать крючок и дочерний процесс, созданный выход крючка. Это дизайн SVN. Я нашел решение, обратитесь: http://svn.haxx.se/users/archive-2008-11/0301.shtml
Если предположить, что он знает, о чем говорит, я ошибаюсь и ... не заслуживаю.