javasprinf的简单介绍

博主:adminadmin 2023-01-03 11:12:06 1514

今天给各位分享javasprinf的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

用什么方法是java应用程序作为一个后台服务运行

在Windows中,无法直接用Java产生Service程序;但是可能通过编写DCOM 或 MTS COM 或 COM+(Window2000) 组件 或 Corba 来模拟Service程序,可以实现透明远程过程调用;

StdAfx.h

#if !defined(AFX_STDAFX_H__7CCCEEAD_83A0_11D4_B105_000021E19FBF__INCLUDED_)

#define AFX_STDAFX_H__7CCCEEAD_83A0_11D4_B105_000021E19FBF__INCLUDED_

#if _MSC_VER 1000

#pragma once

#endif // _MSC_VER 1000

#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers

#include stdio.h

#include stdlib.h

#include windows.h

#include winsvc.h

#endif

//----------------------------------------------------------------

service.h

// Service.h: interface for the CService class.

//

//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SERVICE_H__7CCCEEB1_83A0_11D4_B105_000021E19FBF__INCLUDED_)

#define AFX_SERVICE_H__7CCCEEB1_83A0_11D4_B105_000021E19FBF__INCLUDED_

#if _MSC_VER 1000

#pragma once

#endif // _MSC_VER 1000

typedef struct T_SERVICE

{

char ServiceName[128];

char DisplayName[128];

char ExecutePath[_MAX_PATH];

}T_SERVICE;

BOOL LoadServiceSetting(const char* ServiceName,T_SERVICE* pService);

BOOL SaveServiceSetting(T_SERVICE* pService);

void DeleteServiceSetting(const char* ServiceName);

int outputerr(DWORD nErr=0);

inline BOOL outputerr(long nErr)

{

outputerr((DWORD)nErr);

return FALSE;

}

#ifdef _DEBUGLOG

#define WRITELOG writelog

void writelog(const char* fmt,...);

#else

#define WRITELOG

#endif

VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv);

#endif // !defined(AFX_SERVICE_H__7CCCEEB1_83A0_11D4_B105_000021E19FBF__INCLUDED_)

//----------------------------------------------------------------

StdAfx.cpp

#include "stdafx.h"

//----------------------------------------------------------------

Service.cpp

// Service.cpp: implementation of the CService class.

//

//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "Service.h"

const char REG_PATH[] = "Software\\Free\\ServiceAny";

const char REG_DISPLAYNAME[] = "DisplayName";

const char REG_SERVICENAME[] = "ServiceName";

const char REG_EXECUTEPATH[] = "ExecutePath";

void DeleteServiceSetting(const char* ServiceName)

{

char temp[1024];

sprintf(temp,"%s\\%s",REG_PATH,ServiceName);

::RegDeleteKey(HKEY_LOCAL_MACHINE,temp);

}

BOOL LoadServiceSetting(const char* ServiceName,T_SERVICE* pService)

{

char temp[1024];

sprintf(temp,"%s\\%s",REG_PATH,ServiceName);

HKEY hKey=NULL;

long r = ::RegOpenKeyEx(

HKEY_LOCAL_MACHINE,

temp,NULL,KEY_READ,hKey);

if (r != 0)

return outputerr(r);

DWORD Type=0;

DWORD cbtemp = sizeof(temp);

r = ::RegQueryValueEx(hKey,REG_SERVICENAME,NULL,Type,(LPBYTE)temp,cbtemp);

if (r != 0 || Type != REG_SZ)

{

::RegCloseKey(hKey);

return outputerr(r);

}

strcpy(pService-ServiceName,temp);

cbtemp = sizeof(temp);

r = ::RegQueryValueEx(hKey,REG_DISPLAYNAME,NULL,Type,(LPBYTE)temp,cbtemp);

if (r == 0 Type == REG_SZ)

strcpy(pService-DisplayName,temp);

else

strcpy(pService-DisplayName,pService-ServiceName);

cbtemp = sizeof(temp);

r = ::RegQueryValueEx(hKey,REG_EXECUTEPATH,NULL,Type,(LPBYTE)temp,cbtemp);

if (r != 0 || Type != REG_SZ)

{

::RegCloseKey(hKey);

return outputerr(r);

}

strcpy(pService-ExecutePath,temp);

::RegCloseKey(hKey);

return TRUE;

}

static LONG SetRegValue(HKEY hKey,const char* Name,const char* Value)

{

return ::RegSetValueEx(hKey,Name,NULL,REG_SZ,(CONST BYTE*)Value,strlen(Value)+1);

}

BOOL SaveServiceSetting(T_SERVICE* pService)

{

char temp[1024];

sprintf(temp,"%s\\%s",REG_PATH,pService-ServiceName);

HKEY hKey=NULL;

DWORD cbtemp=0;

long r = ::RegCreateKeyEx(

HKEY_LOCAL_MACHINE,temp,NULL,

"",NULL,KEY_WRITE,NULL,hKey,cbtemp);

if (r != 0)

return outputerr(r);

if (strlen(pService-DisplayName)==0)

{

strcpy(pService-DisplayName,pService-ServiceName);

}

r = SetRegValue(hKey,REG_SERVICENAME,pService-ServiceName);

if (r != 0)

{

::RegCloseKey(hKey);

return outputerr(r);

}

r = SetRegValue(hKey,REG_DISPLAYNAME,pService-DisplayName);

if (r != 0)

{

::RegCloseKey(hKey);

return outputerr(r);

}

r = SetRegValue(hKey,REG_EXECUTEPATH,pService-ExecutePath);

if (r != 0)

{

::RegCloseKey(hKey);

return outputerr(r);

}

::RegCloseKey(hKey);

return TRUE;

}

#ifdef _DEBUGLOG

void writelog(const char* fmt,...)

{

char msg[2048];

va_list arg;

va_start(arg, fmt);

vsprintf(msg, fmt, arg);

va_end(arg);

FILE* f = fopen("f:\\SrvAny.log","at");

fprintf(f,"%s",msg);

fclose(f);

}

#endif

static char ServiceName[128];

BOOL bLogError = FALSE;

void LogEvent(const char* fmt,...)

{

char msg[2048];

HANDLE hEventSource;

LPTSTR lpszStrings[1];

va_list arg;

va_start(arg, fmt);

vsprintf(msg, fmt, arg);

va_end(arg);

lpszStrings[0] = msg;

hEventSource = RegisterEventSource(NULL, ServiceName);

if (hEventSource != NULL)

{

/* Write to event log. */

ReportEvent(hEventSource,

bLogError?EVENTLOG_ERROR_TYPE:EVENTLOG_INFORMATION_TYPE,

0, 0, NULL, 1, 0, (LPCTSTR*) lpszStrings[0], NULL);

DeregisterEventSource(hEventSource);

}

printf("%s",msg);

}

static SERVICE_STATUS_HANDLE hServiceStatus=NULL;

static SERVICE_STATUS ServiceStatus;

static T_SERVICE Service;

static HANDLE hShutdownEvent=NULL;

static HANDLE hThread=NULL;

DWORD MainThreadId=0;

void SetServiceStatus(DWORD status)

{

ServiceStatus.dwCurrentState = status;

::SetServiceStatus(hServiceStatus,ServiceStatus);

}

void LogError(DWORD nErr=0)

{

if (nErr==0)

nErr = ::GetLastError();

char temp[1024];

DWORD dwLen = ::FormatMessage(

FORMAT_MESSAGE_FROM_SYSTEM |

FORMAT_MESSAGE_IGNORE_INSERTS,NULL,

nErr,NULL,temp,sizeof(temp),NULL);

if (dwLen 0)

temp[dwLen] = NULL;

else

temp[0] = NULL;

bLogError = TRUE;

LogEvent("Win32 Error(%d) %s\n",nErr,temp);

ServiceStatus.dwWin32ExitCode = ERROR_SERVICE_SPECIFIC_ERROR;

ServiceStatus.dwServiceSpecificExitCode = nErr;

}

static void WINAPI ServiceHandler(DWORD dwOpcode)

{

switch (dwOpcode)

{

case SERVICE_CONTROL_STOP:

case SERVICE_CONTROL_SHUTDOWN:

SetServiceStatus(SERVICE_STOP_PENDING);

PostThreadMessage(MainThreadId, WM_QUIT, 0, 0);

break;

case SERVICE_CONTROL_PAUSE:

case SERVICE_CONTROL_CONTINUE:

case SERVICE_CONTROL_INTERROGATE:

default:

break;

}

}

static DWORD WINAPI ThreadProc(LPVOID lpParameter)

{

PROCESS_INFORMATION pi;

STARTUPINFO si;

ZeroMemory(si,sizeof(si));

si.cb = sizeof(si);

char CommandLine[2048];

strcpy(CommandLine,Service.ExecutePath);

if (lpParameter != NULL strlen((const char*)lpParameter)0)

{

strcat(CommandLine," ");

strcat(CommandLine,(const char*)lpParameter);

}

char exedir[_MAX_PATH];

strcpy(exedir,Service.ExecutePath);

int n = strlen(exedir);

for(int i=n-1;i=0;i--)

{

char c = exedir[i];

exedir[i] = NULL;

if (c == '\\')

break;

}

if (!::CreateProcess(

Service.ExecutePath,CommandLine,

NULL,NULL,TRUE,

NULL,NULL,exedir,si,pi))

{

LogError();

LogEvent("can't CreateProcess %s\n",CommandLine);

::PostThreadMessage(MainThreadId, WM_QUIT, 0, 0);

return (DWORD)-1;

}

SetServiceStatus(SERVICE_RUNNING);

HANDLE events[2];

events[0] = pi.hProcess;

events[1] = hShutdownEvent;

DWORD r = ::WaitForMultipleObjects(2,events,FALSE,INFINITE);

if (r != WAIT_OBJECT_0)

{

::PostThreadMessage(pi.dwThreadId,WM_QUIT,0,0);

DWORD r1 = ::WaitForSingleObject(pi.hProcess,10000);

if (r1 == WAIT_TIMEOUT)

{

LogEvent("Can't stop %s normally.\n",Service.ExecutePath);

::TerminateProcess(pi.hProcess,-1);

}

}

if (r != WAIT_OBJECT_0 + 1)

{

::PostThreadMessage(MainThreadId, WM_QUIT, 0, 0);

}

DWORD ec=-1;

::GetExitCodeProcess(pi.hProcess,ec);

::CloseHandle(pi.hProcess);

::CloseHandle(pi.hThread);

return ec;

}

VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)

{

WRITELOG("in ServiceMain,argc=%d\n",dwArgc);

for(DWORD ii=0;iidwArgc;ii++)

{

WRITELOG("argv[%d] = %s\n",ii,lpszArgv[ii]);

}

WRITELOG("\n");

strcpy(ServiceName, lpszArgv[0]);

char param[2048];

param[0] = NULL;

for (DWORD i=1;idwArgc;i++)

{

if (i 1)

strcat(param," ");

if (strchr(lpszArgv[i],' ') == NULL)

strcat(param,lpszArgv[i]);

else

{

strcat(param,"\"");

strcat(param,lpszArgv[i]);

strcat(param,"\"");

}

}

MainThreadId = ::GetCurrentThreadId();

ZeroMemory(ServiceStatus,sizeof(ServiceStatus));

ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;

ServiceStatus.dwCurrentState = SERVICE_STOPPED;

ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN;

hServiceStatus = RegisterServiceCtrlHandler(ServiceName, ServiceHandler);

SetServiceStatus(SERVICE_START_PENDING);

if (!LoadServiceSetting(ServiceName,Service))

LogEvent("Can't find Service Setting for '%s'\n",ServiceName);

else

{

hShutdownEvent = ::CreateEvent(NULL,TRUE,FALSE,NULL);

DWORD ThreadId=0;

hThread = ::CreateThread(NULL,NULL,ThreadProc,param,NULL,ThreadId);

MSG msg;

while (GetMessage(msg, 0, 0, 0))

DispatchMessage(msg);

SetEvent(hShutdownEvent);

WaitForSingleObject(hThread,INFINITE);

::CloseHandle(hThread);

::CloseHandle(hShutdownEvent);

}

SetServiceStatus(SERVICE_STOPPED);

}

//----------------------------------------------------------------

SrvAny.cpp

// SrvAny.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include crtdbg.h

#include "Service.h"

int RegisterService(const char* ServiceName,const char* DisplayName,const char* ExecutePath);

int UnregisterService(const char* ServiceName);

int outputerr(DWORD nErr)

{

if (nErr==0)

nErr = ::GetLastError();

_ASSERT(nErr != 0);

char temp[1024];

DWORD dwLen = ::FormatMessage(

FORMAT_MESSAGE_FROM_SYSTEM |

FORMAT_MESSAGE_IGNORE_INSERTS,NULL,

nErr,NULL,temp,sizeof(temp),NULL);

printf("Win32 Error(%d)",nErr);

if (dwLen 0)

printf("\t%s",temp);

printf("\n");

return -1;

}

int usage()

{

printf("SrvAny usage\n");

printf("\t/s ServiceName [DisplayName] ExecutePath\tRegister Service\n");

printf("\t/u ServiceName \tUnregister Service\n");

printf("\n");

return -1;

}

int main(int argc, char* argv[])

{

WRITELOG("in main,argc=%d\n",argc);

for(int i=0;iargc;i++)

{

WRITELOG("argv[%d] = %s\n",i,argv[i]);

}

WRITELOG("\n");

if (argc == 1)

{

SERVICE_TABLE_ENTRY st[] =

{

{ "", ServiceMain },

{ NULL, NULL }

};

if (!::StartServiceCtrlDispatcher(st))

return usage();

else

return 0;

}

if (strcmp(argv[1],"/?")==0)

return usage();

if (strcmp(argv[1],"/s")==0)

{

if (argc == 4)

return RegisterService(argv[2],argv[2],argv[3]);

if (argc == 5)

return RegisterService(argv[2],argv[3],argv[4]);

return usage();

}

if (strcmp(argv[1],"/u")==0)

{

if (argc != 3)

return usage();

else

如何在sprintf函数中输出百分号等特殊符号?

php中的sprinf可以格式化字符串的数据类型。今天遇到了想在其中输出%,可难倒我了。\r\n\r\n$query = sprintf("select * from books where %s like '% %s %'",$searchtype,$searchterm);\r\n\r\n//我以为输出是这样的:select * from books where title like '% java %' ,但实际上输出会是select * from books where title like '% \r\n\r\n将其换成这样就可以了:\r\n\r\n$query = sprintf("select * from books where %s like '%%%s%%'",$searchtype,$searchterm);\r\n\r\n//其中的%%中的第一个%用来转译特殊字符。

用java实现基于纹理的图像检索(灰度共生矩阵)

%**************************************************************************

% 图像检索——纹理特征

%基于共生矩阵纹理特征提取,d=1,θ=0°,45°,90°,135°共四个矩阵

%所用图像灰度级均为256

%参考《基于颜色空间和纹理特征的图像检索》

%function : T=Texture(Image)

%Image : 输入图像数据

%T : 返回八维纹理特征行向量

%**************************************************************************

% function T = Texture(Image)

Gray = imread('d:\result5.bmp');

[M,N,O] = size(Gray);

M = 128;

N = 128;

%--------------------------------------------------------------------------

%1.将各颜色分量转化为灰度

%--------------------------------------------------------------------------

% Gray = double(0.3*Image(:,:,1)+0.59*Image(:,:,2)+0.11*Image(:,:,3));

%--------------------------------------------------------------------------

%2.为了减少计算量,对原始图像灰度级压缩,将Gray量化成16级

%--------------------------------------------------------------------------

for i = 1:M

for j = 1:N

for n = 1:256/16

if (n-1)*16=Gray(i,j)Gray(i,j)=(n-1)*16+15

Gray(i,j) = n-1;

end

end

end

end

%--------------------------------------------------------------------------

%3.计算四个共生矩阵P,取距离为1,角度分别为0,45,90,135

%--------------------------------------------------------------------------

P = zeros(16,16,4);

for m = 1:16

for n = 1:16

for i = 1:M

for j = 1:N

if jNGray(i,j)==m-1Gray(i,j+1)==n-1

P(m,n,1) = P(m,n,1)+1;

P(n,m,1) = P(m,n,1);

end

if i1jNGray(i,j)==m-1Gray(i-1,j+1)==n-1

P(m,n,2) = P(m,n,2)+1;

P(n,m,2) = P(m,n,2);

end

if iMGray(i,j)==m-1Gray(i+1,j)==n-1

P(m,n,3) = P(m,n,3)+1;

P(n,m,3) = P(m,n,3);

end

if iMjNGray(i,j)==m-1Gray(i+1,j+1)==n-1

P(m,n,4) = P(m,n,4)+1;

P(n,m,4) = P(m,n,4);

end

end

end

if m==n

P(m,n,:) = P(m,n,:)*2;

end

end

end

%%---------------------------------------------------------

% 对共生矩阵归一化

%%---------------------------------------------------------

for n = 1:4

P(:,:,n) = P(:,:,n)/sum(sum(P(:,:,n)));

end

%--------------------------------------------------------------------------

%4.对共生矩阵计算能量、熵、惯性矩、相关4个纹理参数

%--------------------------------------------------------------------------

H = zeros(1,4);

I = H;

Ux = H; Uy = H;

deltaX= H; deltaY = H;

C =H;

for n = 1:4

E(n) = sum(sum(P(:,:,n).^2)); %%能量

for i = 1:16

for j = 1:16

if P(i,j,n)~=0

H(n) = -P(i,j,n)*log(P(i,j,n))+H(n); %%熵

end

I(n) = (i-j)^2*P(i,j,n)+I(n); %%惯性矩

Ux(n) = i*P(i,j,n)+Ux(n); %相关性中μx

Uy(n) = j*P(i,j,n)+Uy(n); %相关性中μy

end

end

end

for n = 1:4

for i = 1:16

for j = 1:16

deltaX(n) = (i-Ux(n))^2*P(i,j,n)+deltaX(n); %相关性中σx

deltaY(n) = (j-Uy(n))^2*P(i,j,n)+deltaY(n); %相关性中σy

C(n) = i*j*P(i,j,n)+C(n);

end

end

C(n) = (C(n)-Ux(n)*Uy(n))/deltaX(n)/deltaY(n); %相关性

end

%--------------------------------------------------------------------------

%求能量、熵、惯性矩、相关的均值和标准差作为最终8维纹理特征

%--------------------------------------------------------------------------

a1 = mean(E)

b1 = sqrt(cov(E))

a2 = mean(H)

b2 = sqrt(cov(H))

a3 = mean(I)

b3 = sqrt(cov(I))

a4 = mean(C)

b4 = sqrt(cov(C))

sprintf('0,45,90,135方向上的能量依次为: %f, %f, %f, %f',E(1),E(2),E(3),E(4)) % 输出数据;

sprintf('0,45,90,135方向上的熵依次为: %f, %f, %f, %f',H(1),H(2),H(3),H(4)) % 输出数据;

sprintf('0,45,90,135方向上的惯性矩依次为: %f, %f, %f, %f',I(1),I(2),I(3),I(4)) % 输出数据;

sprintf('0,45,90,135方向上的相关性依次为: %f, %f, %f, %f',C(1),C(2),C(3),C(4)) % 输出数据;

这是我最近用过的求灰度共生矩阵及其四个参数的程序,你可以参考一下。

如何在JAVA中实现类似VC中sprintf的功能

如何在JAVA中实现VC下列程序的功能: char ver[3], verch; ... sprintf ( ver, "%02x", (char)verch ); 谢谢

再简单一些: 类似 int i; sprintf(ver, "%2d", i)就可以了。

关于javasprinf和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。