Пример #1
0
bool Worker::Attach(ZRef<Starter> iStarter)
	{
	ZAcqMtx acq(fMtx);
	if (not fStarter)
		{
		fStarter = iStarter;

		try
			{
			ZRelMtx rel(fMtx);
			sCall(fCallable_Attached, this);
			return true;
			}
		catch (...) {}

		fStarter.Clear();
		fCnd.Broadcast();

		ZRelMtx rel(fMtx);
		try { sCall(fCallable_Detached, this); }
		catch (...) {}
		}
	return false;
	}
Пример #2
0
//
// Entry point for the console application.
//
int _tmain(int argc, _TCHAR* argv[])
{
	char * pgVimExe = "C:\\Users\\sbenner\\AppData\\Roaming\\Vim\\vim72\\gvim.exe";
/*
	pgVimExe = std::getenv ("GVIM_EXECUTABLE");
	bool bError = false;
	if (pgVimExe == NULL)
	{
		std::cout << "Error: Cannot find environment variable GVIM_EXECUTABLE";
		bError = true;
	}
	else if (argc < 2)
	{
		std::cout << "Error: Invalid number of argument.";
		bError = true;
	}
	if (bError)
	{
		return 1;
	}
*/
	std::string sCall("start \"\" \"");
	sCall += pgVimExe;
	sCall += "\" --remote-tab-silent";
	for (int i=1; i<argc; ++i)
	{
		sCall += " \"";
		sCall += argv[i];
		sCall += "\"";
	}

#ifdef _DEBUG
	std::cout << "Calling " << sCall.c_str() << "...";
	std::cout << "\n";
	std::system("pause");
#endif

	// call system command
	std::system(sCall.c_str());

	return 0;
}
Пример #3
0
ZQ<void> Worker::QCall()
	{
	ZAcqMtx acq(fMtx);

	for (;;)
		{
		fWorking = ZThread::sID();
		fNextWake = kDistantFuture;
		ZRelMtx rel(fMtx);

		ZQ<bool> result;

		try { result = fCallable_Work->QCall(this); }
		catch (...) {}

		ZAcqMtx acq(fMtx);
		fWorking = 0;

		if (result && *result)
			{
			if (fNextWake < kDistantFuture)
				{
				if (fNextWake <= Time::sSystem())
					continue;
				sNextStartAt(fNextWake, Job(fStarter, this));
				}
			return notnull;
			}

		fStarter.Clear();
		fCnd.Broadcast();

		ZRelMtx rel2(fMtx);

		try { sCall(fCallable_Detached, this); }
		catch (...) {}

		return null;
		}
	}