С²ËÄñÎÒ×î½ü¿ªÊ¼¾ö¶¨ÈÏÕæÑ§Ò»Ñ§Java»ù´¡ÖªÊ¶¡£
´óѧµÄʱºò¿ªÁËÕâÃſγ̣¬²»¹ýÊÇÑ¡Ð޿Ρ£¶øÇÒµ±Ê±¶ÔC/C++µÄÖ´×ŵ¼ÖÂÎÒÌìÕæµÄÍêÈ«¶ÔJava“±ÉÊÓ”ÓëºöÂÔ¡£ÏÖÔÚ¿´ÆðÀ´ÊǶàôÌìÕæ£¬Ôø¾ºÍºÜ¶à¸¡Ôê¡¢ÎÞÖªµÄÈËÒ»Æð±ÉÊÓÓÃJavaµÄ³ÌÐòÔ±£¬È»ºó²ÅÖªµÀ×Ô¼ºÊǶàôÎÞÖª£¬ÒÔÖÁÓÚºöÂÔÁ˽ü´ú¼¸ºõ×îΰ´ó×îÓÐÕùÒéµÄ¡¢È´¼¯ÖÐÁËÈËÀàÔÚ¼ÆËã»ú±à³ÌÓïÑÔ·½ÃæÎÞÓëÂױȵÄÖǻ۽ᾧ——JavaÓïÑÔ¡£
¶øJAVAµÄ´´Ê¼¹«Ë¾ sun¹«Ë¾£¬ÎÞÒÉÊǹ«ÈϵÄÒ»Á÷¼¼ÊõÈýÁ÷ÓªÏú¡£¶ÔÓÚ¸ÃÎÊÌâµÄÌÖÂÛÒѾ̫¶à£¬Ôڴ˲»¶à¸´Êö¡£
Java ¶ÔÓÚ±äÁ¿×î´óµÄÌØµã¾ÍÊÇ °²È«Ê¹Óá¢À¬»øÊÕ¼¯¡£
¶ÔÓÚд¹ßÁËC/C++µÄ³ÌÐòÔ±À´Ëµ£¬Ê×ÏÈÊǼ«Æä²»Ï°¹ßµÄÒ»¶Ñnew£¨ÕÒ²»µ½deleteÓëÆä¶ÔÓ¦……£©£¬È»ºóÊÇÓÃÆðÀ´ã·ã·²»°²£¨ÒòΪ²»ÐèÒª¿¼ÂÇÊÍ·ÅÄÚ´æ¡£¡££©
Æäʵ´Ó¸ù±¾ÉÏÀ´Àí½âJava£¬»á·¢ÏÖÕâ¸öÉè¼ÆÕæµÄºÜÇÉÃî¡££¨ºÇºÇ£¬²»¹ýÎÒÒ²³ÐÈÏ£¬¸Ã¼¼ÊõÔì³ÉÁ˱à³ÌÄѶÈϽµµ¼ÖÂC/C++³ÌÐòÔ±¾ÍÒµ¿Õ¼ä´ó·ù¶ÈËõË®£©
Ó봫ͳµÄC/C++ËäÈ»Óï·¨ºÜÏñ£¬µ«ÊDZäÁ¿ÔÚÀí½âÉÏ»¹ÊÇÓÐÐí¶àÇø±ðµÄ¡£
ÈçÖ±½Ó new³öÀ´µÄ¶ÔÏóʵÀý£¬±ÈÈç ClassX obj = new ClassX() £¬ÆäÊý¾ÝÊÇ·ÖÅäÔÚ¶ÑÉÏ¡£¶øobjÖ»×÷ΪÆäÒ»¸ö½»»¥µÄ¾ä±ú£¬²»´ú±íÈκεÄÄÚ´æÊµÀý¡£¼ÙÉèÔÚC++Ö ......
1,Íü¼ÇrootÃÜÂë,Èç¹ûÄÜ»¹ÄܽøÈëmysqlÇÒ»¹ÓÐmysql¿âµÄȨÏÞ,ÄÇô¾ÍÖ±½ÓÖ´ÐÐ update user set password=password(¡®XXX¡¯) where user=¡¯root¡¯ and host=¡¯XX¡¯; flush privileges; ¼´¿É.Èç¹û²»ÄܽøÈëmysql,ÐèÒªÓÐmysqlÆô¶¯µÄȨÏÞ,ÔÚÆô¶¯mysqlµÄʱºò¼ÓÉÏ--skip-grant-tablesÑ¡Ïî,´Ëʱ½øÈëmysqlÎÞÐèÃÜÂë,ÔÙÖØ¸´ÉÏÊö²Ù×÷¼´¿É. 2,Èç¹ûÓÐÄÚ´æ±í,ÓÃÀ´²éѯÓõĿì±í,ÄÇôÐèÒªÆô¶¯µÄʱºò°ÑÊý¾Ýµ¼ÈëÄÚ´æ±í,mysqlÓиöÑ¡Ïî½Ð--init-fileÑ¡ÏîÕâʱºòºÜ¹ÜÓÃ,°ÑÒªÖ´ÐеÄsqlдµÀÎļþÖÐ,È»ºóÆô¶¯¼ÓÉÏinit-file='/path/to/file'¿ÉÒÔдµÀmy.cnfÖÐ,ÕâÑù¾Í²»±ØÃ¿´Î¶¼×Ô¼ºÊÖдÁË. ......
½ñÌìÔÚ°ïÅóÓѵ÷ÊÔÒ»¸ö¹ØÓÚ¶àÏ̷߳ÃÎÊͬһÕűíÒýÆðµÄLock wait timeout exceedeµÄÎÊÌ⣬¸Ð¾õÒýÆðµÄÔÒòÓУº
1£¬Ã»ÓнøÐÐÓÅ»¯£¬¾¡Á¿±ÜÃâ¶àÏß³Ì
2£¬¸ù¾ÝËüºóÃæ±¨µÄÒì³££¬ÌáÐÑÎÒ¿ÉÒÔHibernate µÄSessionûÓÐʹÓõõ±£¬(Ò²ÊÇÎÒ½â¾öµÄ·½°¸)
3£¬ÓÃsynchronizedÐÞÊθüбíµÄº¯Êý
¹À¼ÆÊÇÔÀ´³ÌÐòÔÚÐÞ¸ÄÍê¸Ã±íʱÁ¢¿Ì½øÐÐÁ˲åÈë²Ù×÷µ¼Öµģ¬
ËùÒÔÎÒÔÚ¸üкó½øÐÐgetHibernateTemplate().flush();
×îºó£¬ÔÚ²åÈë²Ù×÷£¨save())ʱ£¬Ô±¾ËûÊÇÓÖ´´½¨ÁËÒ»¸öеÄDAO£¬ÔÙ½«¼Ç¼²åÈëµ½Êý¾Ý¿âÖУ¬¶øÒòΪÊÇͬһ¸öDAO£¬ÎÒ½«Æäɾµô£¬Ö±½Óµ÷ÓÃsave()£¬Õâ¸öÎÊÌâÒ²¾Í½â¾öÁË£¡
µ÷ÊÔ֮ǰ£º
public boolean createCurrentSL(Users u){
try {
String queryString = "update Appendlist set isCurrent=? where isCurrent='1' and uid=?";
Object[] objs=new Object[2];
objs[0]=false;
objs[1]=u.getUid();
getHibernateTemplate().bulkUpdate(queryString,objs);
ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml");
IAppendlistDAO alDAO=(IAppendlistDAO)factory.getBean(IAppendlistDAO.BEAN_NAME);
Calendar cal=Calend ......
ÔÚPythonÖеÄÏß³ÌÔËÐÐʵ¼ÊÊÇÊܵ½InterpreterµÄ¿ØÖÆ»òÕßËµÇ£ÖÆµÄ¡£ÔÚInterpreterµÄºËÐĺ¯Êý
PyObject * PyEval_EvalFrameEx
(PyFrameObject *f, int
throwflag)
ÎÒÃÇ¿ÉÒÔ¿´µ½ÓÐÒ»¸öÈ«¾Ö±äÁ¿_Py_TickerÀ´¿ØÖÆ×ÅÏ̶߳ÔInterpreterµÄÕ¼Óеģ¬Ä¬ÈÏÊÇInterpreterÿִÐÐÒ»°ÙÌõÖ¸Áî¾Í»áÊÍ·ÅÁíÒ»¸öÈ«¾Ö±äÁ¿interpreter_lock.
¶ÔÓÚÿ¸öÐÂỊ̈߳¬ËüÊÇÔõô¼ÓÈëµ½¶ÔInterpreterµÄ¾ºÕùÖÐÀ´µÄÄØ£¿Õâ¸öÎÊÌâÎÒÑо¿ÁËһϡ£ÆäÍ»Èëµã¾ÍÔÚµ±threadÄ£¿éÔÚʹÓÃthread_PyThread_start_new_threadÀ´´´½¨ºÍÆô¶¯ÐÂÏß³Ìʱ£¬ÐÂÏß³ÌµÄÆô¶¯º¯Êý¾ÍÊÇt_bootstrap,ÔÚt_bootstrapÖУ¬Ëû»áʹÓõ½Ò»¸öº¯Êý
void
PyEval_AcquireThread
(PyThreadState *tstate)
´Óµ÷ÓÃÕâ¸öº¯Êý¿ªÊ¼£¬ÐÂÔËÐеÄÏ߳̾ͿªÊ¼Á˽øÈëµ½Õù¶áinterpreterµÄÐÐÁÐÀïÀ´ÁË¡£
¶ÔÓ¦ÓëÕâ¸öº¯Êý»¹ÓÐÒ»¸ö
void
PyEval_ReleaseThread
(PyThreadState *tstate)
ºÜÇå³þ£¬Ò»¸öÊÇÓÃÀ´¶áËøµÄ£¬Ò»¸öÊÇÓÃÀ´·ÅËøµÄ¡£
´ËÍ⣬ÎÒÃÇÖªµÀÈç¹ûÔÚÒ»¸öÏß³ÌÖУ¬¶ÔÓ¦ÓëPythonµÄInterpreterµÄij¸öÖ¸Áîµ÷Ó㬱ÈÈçÊǺ¯Êýµ÷ÓÃÖ¸Á¶øÕâ¸öµ÷Óõĺ¯ÊýÓÐÊÇ»ùÓÚC module extensionÀ´ÊµÏֵ쬶øÔÚÕâ¸öº¯ÊýÖÐÈç¹ûÓÐIO»òÆäËüblockÐ͵IJÙ×÷µÄ»°£¬ÎÞÒÉÕâ¸öÏ̻߳ᱻblo ......
ÉÏһƪÖÐÎÒÃÇÒѾÁ˽âÈçºÎÔÚPython³ÌÐòºÍCÄ£¿éÖ®¼ä½øÐÐÖµµÄÏ໥´«µÝ£¬ÏÖÔÚÎÒÃÇÀ´½øÈëʵ×÷½×¶Î£¬¿´¿´ÈçºÎ½«Ò»¸öCÓïÑÔ¿ª·¢µÄ¿ªÔ´mp3±à½âÂë¿âLAME°üװΪһ¸öPythonÏ¿ÉÒÔʹÓõÄÀ©Õ¹Ä£¿é¡£Ê×ÏÈÈ¥http://lame.sourceforge.net/download.phpÏÂÔØLAMEµÄÔ´´úÂ룬ȻºóÇл»µ½rootÓû§±àÒëÔ´´úÂ룬./configure
make
make install°²×°Íê³ÉºóÄã¿ÉÒÔÔÚ/usr/local/include/lameĿ¼ÏÂÕÒµ½lame.hÍ·Îļþ£¬ÎÒÃÇÔÚºóÃæµÄdemo³ÌÐòÖлáincludeËüµÄ£¬ÏÂÃæ¾ÍÊÇÒ»¸ö·Ç³£¼òµ¥µÄlameʾÀý³ÌÐòlame_test.c:´úÂë#include <stdio.h>
#include <stdlib.h>
#include <lame.h>
#define INBUFSIZE 4096
#define MP3BUFSIZE (int) (1.25 * INBUFSIZE) + 7200
int encode(char* inPath, char* outPath) {
int status = 0;
lame_global_flags* gfp;
int ret_code;
FILE* infp;
FILE* outfp;
sh ......
ÉÏһƪÖÐÎÒÃÇÒѾÁ˽âÈçºÎÔÚPython³ÌÐòºÍCÄ£¿éÖ®¼ä½øÐÐÖµµÄÏ໥´«µÝ£¬ÏÖÔÚÎÒÃÇÀ´½øÈëʵ×÷½×¶Î£¬¿´¿´ÈçºÎ½«Ò»¸öCÓïÑÔ¿ª·¢µÄ¿ªÔ´mp3±à½âÂë¿âLAME°üװΪһ¸öPythonÏ¿ÉÒÔʹÓõÄÀ©Õ¹Ä£¿é¡£Ê×ÏÈÈ¥http://lame.sourceforge.net/download.phpÏÂÔØLAMEµÄÔ´´úÂ룬ȻºóÇл»µ½rootÓû§±àÒëÔ´´úÂ룬./configure
make
make install°²×°Íê³ÉºóÄã¿ÉÒÔÔÚ/usr/local/include/lameĿ¼ÏÂÕÒµ½lame.hÍ·Îļþ£¬ÎÒÃÇÔÚºóÃæµÄdemo³ÌÐòÖлáincludeËüµÄ£¬ÏÂÃæ¾ÍÊÇÒ»¸ö·Ç³£¼òµ¥µÄlameʾÀý³ÌÐòlame_test.c:´úÂë#include <stdio.h>
#include <stdlib.h>
#include <lame.h>
#define INBUFSIZE 4096
#define MP3BUFSIZE (int) (1.25 * INBUFSIZE) + 7200
int encode(char* inPath, char* outPath) {
int status = 0;
lame_global_flags* gfp;
int ret_code;
FILE* infp;
FILE* outfp;
sh ......
ÔÚÉÏһƪÖÐÎÒÃÇÒѾʹÓÃcÓïÑÔʵÏÖÁËÒ»¸ö×î¼òµ¥µÄÀ©Õ¹Ä£¿é£¬ÕâһƪÖн«ÔÚÆä»ù´¡ÉϽøÐй¦Äܵķḻ¡£Ê×ÏÈÀ´¿¼ÂÇÈçºÎ´ÓÍⲿµÄPythonÏòCÄ£¿é´«µÝ½ø²ÎÊý£¬foo_bar2չʾÁËÈçºÎÏòCÄ£¿é´«µÝÕûÊý£¬¸¡µãÊý£¬×Ö·û´®Èý¸ö²ÎÊý£¬ÆäÖÐ"ids"Ö¸Ã÷ÁË´«Èë²ÎÊýµÄÊý¾ÝÀàÐÍ¡£PyArg_ParseTuple¸ºÔð¶Ôargs½øÐнâÎö£¬Èô½âÎöʧ°ÜÔò·µ»Ø0.´úÂë#include <Python.h>
static PyObject* foo_bar(PyObject* self, PyObject* args) {
Py_RETURN_NONE;
}
static PyObject* foo_bar2(PyObject* self, PyObject* args) {
int iNum;
double fNum;
char* str;
if (!PyArg_ParseTuple(args, "ids", &iNum, &fNum, &str)) {
return NULL;
}
Py_RETURN_NONE;
}
static PyMethodDef foo_methods[] = {
&n ......
ÔÚÉÏһƪÖÐÎÒÃÇÒѾʹÓÃcÓïÑÔʵÏÖÁËÒ»¸ö×î¼òµ¥µÄÀ©Õ¹Ä£¿é£¬ÕâһƪÖн«ÔÚÆä»ù´¡ÉϽøÐй¦Äܵķḻ¡£Ê×ÏÈÀ´¿¼ÂÇÈçºÎ´ÓÍⲿµÄPythonÏòCÄ£¿é´«µÝ½ø²ÎÊý£¬foo_bar2չʾÁËÈçºÎÏòCÄ£¿é´«µÝÕûÊý£¬¸¡µãÊý£¬×Ö·û´®Èý¸ö²ÎÊý£¬ÆäÖÐ"ids"Ö¸Ã÷ÁË´«Èë²ÎÊýµÄÊý¾ÝÀàÐÍ¡£PyArg_ParseTuple¸ºÔð¶Ôargs½øÐнâÎö£¬Èô½âÎöʧ°ÜÔò·µ»Ø0.´úÂë#include <Python.h>
static PyObject* foo_bar(PyObject* self, PyObject* args) {
Py_RETURN_NONE;
}
static PyObject* foo_bar2(PyObject* self, PyObject* args) {
int iNum;
double fNum;
char* str;
if (!PyArg_ParseTuple(args, "ids", &iNum, &fNum, &str)) {
return NULL;
}
Py_RETURN_NONE;
}
static PyMethodDef foo_methods[] = {
&n ......