Laszlo's fix to make generate threads idle priority on Linux,
replaced some wxBase dependencies: wxMutex, wxFileExists, wxStandardPaths, wxGetLocalTimeMillis git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@99 1a98c847-1fd6-4fd8-948a-caf3550aa51b
This commit is contained in:
parent
d77eac25b2
commit
d882773789
17 changed files with 167 additions and 101 deletions
|
@ -59,6 +59,10 @@
|
|||
#include <boost/function.hpp>
|
||||
#include <boost/filesystem.hpp>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <boost/interprocess/sync/interprocess_mutex.hpp>
|
||||
#include <boost/interprocess/sync/interprocess_recursive_mutex.hpp>
|
||||
#include <boost/date_time/gregorian/gregorian_types.hpp>
|
||||
#include <boost/date_time/posix_time/posix_time_types.hpp>
|
||||
|
||||
#ifdef __WXMSW__
|
||||
#include <windows.h>
|
||||
|
|
74
init.cpp
74
init.cpp
|
@ -4,6 +4,8 @@
|
|||
|
||||
#include "headers.h"
|
||||
|
||||
extern string GetDefaultDataDir(); /// todo: delete this later, just used by debug test
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -59,40 +61,6 @@ void Shutdown(void* parg)
|
|||
//
|
||||
|
||||
#ifdef __WXMSW__
|
||||
typedef WINSHELLAPI BOOL (WINAPI *PSHGETSPECIALFOLDERPATHA)(HWND hwndOwner, LPSTR lpszPath, int nFolder, BOOL fCreate);
|
||||
|
||||
string MyGetSpecialFolderPath(int nFolder, bool fCreate)
|
||||
{
|
||||
char pszPath[MAX_PATH+100] = "";
|
||||
|
||||
// SHGetSpecialFolderPath is not usually available on NT 4.0
|
||||
HMODULE hShell32 = LoadLibraryA("shell32.dll");
|
||||
if (hShell32)
|
||||
{
|
||||
PSHGETSPECIALFOLDERPATHA pSHGetSpecialFolderPath =
|
||||
(PSHGETSPECIALFOLDERPATHA)GetProcAddress(hShell32, "SHGetSpecialFolderPathA");
|
||||
if (pSHGetSpecialFolderPath)
|
||||
(*pSHGetSpecialFolderPath)(NULL, pszPath, nFolder, fCreate);
|
||||
FreeModule(hShell32);
|
||||
}
|
||||
|
||||
// Backup option
|
||||
if (pszPath[0] == '\0')
|
||||
{
|
||||
if (nFolder == CSIDL_STARTUP)
|
||||
{
|
||||
strcpy(pszPath, getenv("USERPROFILE"));
|
||||
strcat(pszPath, "\\Start Menu\\Programs\\Startup");
|
||||
}
|
||||
else if (nFolder == CSIDL_APPDATA)
|
||||
{
|
||||
strcpy(pszPath, getenv("APPDATA"));
|
||||
}
|
||||
}
|
||||
|
||||
return pszPath;
|
||||
}
|
||||
|
||||
string StartupShortcutPath()
|
||||
{
|
||||
return MyGetSpecialFolderPath(CSIDL_STARTUP, true) + "\\Bitcoin.lnk";
|
||||
|
@ -100,7 +68,7 @@ string StartupShortcutPath()
|
|||
|
||||
bool GetStartOnSystemStartup()
|
||||
{
|
||||
return wxFileExists(StartupShortcutPath());
|
||||
return filesystem::exists(StartupShortcutPath().c_str());
|
||||
}
|
||||
|
||||
void SetStartOnSystemStartup(bool fAutoStart)
|
||||
|
@ -166,7 +134,7 @@ void SetStartOnSystemStartup(bool fAutoStart) { }
|
|||
//
|
||||
|
||||
// Define a new application
|
||||
class CMyApp: public wxApp
|
||||
class CMyApp : public wxApp
|
||||
{
|
||||
public:
|
||||
wxLocale m_locale;
|
||||
|
@ -216,7 +184,10 @@ bool CMyApp::Initialize(int& argc, wxChar** argv)
|
|||
#ifdef __WXMSW__
|
||||
if (str.size() >= 1 && str[0] == '/')
|
||||
str[0] = '-';
|
||||
str = str.MakeLower();
|
||||
char pszLower[MAX_PATH];
|
||||
strlcpy(pszLower, str.c_str(), sizeof(pszLower));
|
||||
strlwr(pszLower);
|
||||
str = pszLower;
|
||||
#endif
|
||||
// haven't decided which argument to use for this yet
|
||||
if (str == "-daemon" || str == "-d" || str == "start")
|
||||
|
@ -356,18 +327,14 @@ bool CMyApp::OnInit2()
|
|||
" -daemon \t " + _("Run in the background as a daemon and accept commands\n") +
|
||||
" -? \t " + _("This help message\n");
|
||||
|
||||
|
||||
if (fWindows && fGUI)
|
||||
{
|
||||
// Tabs make the columns line up in the message box
|
||||
wxMessageBox(strUsage, "Bitcoin", wxOK);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Remove tabs
|
||||
strUsage.Replace("\t", "");
|
||||
fprintf(stderr, "%s", ((string)strUsage).c_str());
|
||||
}
|
||||
#if defined(__WXMSW__) && wxUSE_GUI
|
||||
// Tabs make the columns line up in the message box
|
||||
wxMessageBox(strUsage, "Bitcoin", wxOK);
|
||||
#else
|
||||
// Remove tabs
|
||||
strUsage.Replace("\t", "");
|
||||
fprintf(stderr, "%s", ((string)strUsage).c_str());
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -387,6 +354,15 @@ bool CMyApp::OnInit2()
|
|||
printf("System default language is %d %s\n", m_locale.GetSystemLanguage(), ((string)m_locale.GetSysName()).c_str());
|
||||
printf("Language file %s (%s)\n", (string("locale/") + (string)m_locale.GetCanonicalName() + "/LC_MESSAGES/bitcoin.mo").c_str(), ((string)m_locale.GetLocale()).c_str());
|
||||
|
||||
/// debug - for now, just watching if these match
|
||||
if (pszSetDataDir[0] == 0)
|
||||
{
|
||||
if (GetDefaultDataDir() != GetDataDir())
|
||||
printf("**** GetDefaultDataDir() %s != %s\n", GetDefaultDataDir().c_str(), GetDataDir().c_str());
|
||||
else
|
||||
printf("OK GetDefaultDataDir() %s == %s\n", GetDefaultDataDir().c_str(), GetDataDir().c_str());
|
||||
}
|
||||
|
||||
if (mapArgs.count("-loadblockindextest"))
|
||||
{
|
||||
CTxDB txdb("r");
|
||||
|
|
Binary file not shown.
|
@ -692,6 +692,8 @@ msgstr "Version"
|
|||
msgid ""
|
||||
"Copyright (c) 2009-2010 Satoshi Nakamoto.\n"
|
||||
"\n"
|
||||
"This is experimental software.\n"
|
||||
"\n"
|
||||
"Distributed under the MIT/X11 software license, see the accompanying file \n"
|
||||
"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
|
||||
"\n"
|
||||
|
@ -701,6 +703,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Copyright (c) 2009-2010 Satoshi Nakamoto.\n"
|
||||
"\n"
|
||||
"Dies ist experimentelle Software.\n"
|
||||
"\n"
|
||||
"Lizensiert unter der MIT/X11 Software-Lizenz. Beachten Sie die beiliegende\n"
|
||||
"Datei license.txt oder http://www.opensource.org/licenses/mit-license.php.\n"
|
||||
"\n"
|
||||
|
|
Binary file not shown.
|
@ -690,6 +690,8 @@ msgstr "versione"
|
|||
msgid ""
|
||||
"Copyright (c) 2009-2010 Satoshi Nakamoto.\n"
|
||||
"\n"
|
||||
"This is experimental software.\n"
|
||||
"\n"
|
||||
"Distributed under the MIT/X11 software license, see the accompanying file \n"
|
||||
"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
|
||||
"\n"
|
||||
|
@ -699,6 +701,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Copyright (c) 2009-2010 Satoshi Nakamoto.\n"
|
||||
"\n"
|
||||
"Questo è un software sperimentale.\n"
|
||||
"\n"
|
||||
"Distribuito sotto la licenza software MIT/X11, guarda il file license.txt\n"
|
||||
"incluso oppure su http://www.opensource.org/licenses/mit-license.php.\n"
|
||||
"\n"
|
||||
|
|
Binary file not shown.
|
@ -691,6 +691,8 @@ msgstr "versie"
|
|||
msgid ""
|
||||
"Copyright (c) 2009-2010 Satoshi Nakamoto.\n"
|
||||
"\n"
|
||||
"This is experimental software.\n"
|
||||
"\n"
|
||||
"Distributed under the MIT/X11 software license, see the accompanying file \n"
|
||||
"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
|
||||
"\n"
|
||||
|
@ -700,6 +702,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Copyright (c) 2009-2010 Satoshi Nakamoto.\n"
|
||||
"\n"
|
||||
"Dit is experimentele software.\n"
|
||||
"\n"
|
||||
"Gedistributeerd onder de MIT/X11 software licentie, see het bijbehorende bestand \n"
|
||||
"license.txt of http://www.opensource.org/licenses/mit-license.php.\n"
|
||||
"\n"
|
||||
|
|
42
main.cpp
42
main.cpp
|
@ -1477,7 +1477,10 @@ bool CheckDiskSpace(int64 nAdditionalBytes)
|
|||
if (nFreeBytesAvailable < (int64)15000000 + nAdditionalBytes)
|
||||
{
|
||||
fShutdown = true;
|
||||
printf("*** %s***\n", _("Warning: Disk space is low "));
|
||||
#if wxUSE_GUI
|
||||
ThreadSafeMessageBox(_("Warning: Disk space is low "), "Bitcoin", wxOK | wxICON_EXCLAMATION);
|
||||
#endif
|
||||
CreateThread(Shutdown, NULL);
|
||||
return false;
|
||||
}
|
||||
|
@ -2713,25 +2716,32 @@ void BitcoinMiner()
|
|||
if ((++tmp.block.nNonce & nMask) == 0)
|
||||
{
|
||||
// Meter hashes/sec
|
||||
static int64 nHashCounter;
|
||||
static int64 nLastTick;
|
||||
if (nLastTick == 0)
|
||||
nLastTick = GetTimeMillis();
|
||||
static int64 nTimerStart;
|
||||
static int nHashCounter;
|
||||
if (nTimerStart == 0)
|
||||
nTimerStart = GetTimeMillis();
|
||||
else
|
||||
nHashCounter += nMask + 1;
|
||||
if (GetTimeMillis() - nLastTick > 4000)
|
||||
nHashCounter++;
|
||||
if (GetTimeMillis() - nTimerStart > 4000)
|
||||
{
|
||||
double dHashesPerSec = 1000.0 * nHashCounter / (GetTimeMillis() - nLastTick);
|
||||
nLastTick = GetTimeMillis();
|
||||
nHashCounter = 0;
|
||||
string strStatus = strprintf(" %.0f khash/s", dHashesPerSec/1000.0);
|
||||
UIThreadCall(bind(CalledSetStatusBar, strStatus, 0));
|
||||
static int64 nLogTime;
|
||||
if (GetTime() - nLogTime > 30 * 60)
|
||||
static CCriticalSection cs;
|
||||
CRITICAL_BLOCK(cs)
|
||||
{
|
||||
nLogTime = GetTime();
|
||||
printf("%s ", DateTimeStrFormat("%x %H:%M", GetTime()).c_str());
|
||||
printf("hashmeter %3d CPUs %6.0f khash/s\n", vnThreadsRunning[3], dHashesPerSec/1000.0);
|
||||
if (GetTimeMillis() - nTimerStart > 4000)
|
||||
{
|
||||
double dHashesPerSec = 1000.0 * (nMask+1) * nHashCounter / (GetTimeMillis() - nTimerStart);
|
||||
nTimerStart = GetTimeMillis();
|
||||
nHashCounter = 0;
|
||||
string strStatus = strprintf(" %.0f khash/s", dHashesPerSec/1000.0);
|
||||
UIThreadCall(bind(CalledSetStatusBar, strStatus, 0));
|
||||
static int64 nLogTime;
|
||||
if (GetTime() - nLogTime > 30 * 60)
|
||||
{
|
||||
nLogTime = GetTime();
|
||||
printf("%s ", DateTimeStrFormat("%x %H:%M", GetTime()).c_str());
|
||||
printf("hashmeter %3d CPUs %6.0f khash/s\n", vnThreadsRunning[3], dHashesPerSec/1000.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -68,6 +68,6 @@ bitcoind: $(OBJS:obj/%=obj/nogui/%) obj/sha.o
|
|||
|
||||
|
||||
clean:
|
||||
-rm obj/*.o
|
||||
-rm obj/nogui/*.o
|
||||
-rm headers.h.gch
|
||||
-rm -f obj/*.o
|
||||
-rm -f obj/nogui/*.o
|
||||
-rm -f headers.h.gch
|
||||
|
|
22
rpc.cpp
22
rpc.cpp
|
@ -927,20 +927,22 @@ int CommandLineRPC(int argc, char *argv[])
|
|||
string strResult = (result.type() == str_type ? result.get_str() : write_string(result, true));
|
||||
if (result.type() != null_type)
|
||||
{
|
||||
if (fWindows && fGUI)
|
||||
// Windows GUI apps can't print to command line,
|
||||
// so settle for a message box yuck
|
||||
MyMessageBox(strResult.c_str(), "Bitcoin", wxOK);
|
||||
else
|
||||
fprintf(stdout, "%s\n", strResult.c_str());
|
||||
#if defined(__WXMSW__) && wxUSE_GUI
|
||||
// Windows GUI apps can't print to command line,
|
||||
// so settle for a message box yuck
|
||||
MyMessageBox(strResult.c_str(), "Bitcoin", wxOK);
|
||||
#else
|
||||
fprintf(stdout, "%s\n", strResult.c_str());
|
||||
#endif
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
catch (std::exception& e) {
|
||||
if (fWindows && fGUI)
|
||||
MyMessageBox(strprintf("error: %s\n", e.what()).c_str(), "Bitcoin", wxOK);
|
||||
else
|
||||
fprintf(stderr, "error: %s\n", e.what());
|
||||
#if defined(__WXMSW__) && wxUSE_GUI
|
||||
MyMessageBox(strprintf("error: %s\n", e.what()).c_str(), "Bitcoin", wxOK);
|
||||
#else
|
||||
fprintf(stderr, "error: %s\n", e.what());
|
||||
#endif
|
||||
} catch (...) {
|
||||
PrintException(NULL, "CommandLineRPC()");
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ class CDataStream;
|
|||
class CAutoFile;
|
||||
|
||||
static const int VERSION = 300;
|
||||
static const char* pszSubVer = "";
|
||||
static const char* pszSubVer = ".1";
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -554,7 +554,7 @@ CAboutDialogBase::CAboutDialogBase( wxWindow* parent, wxWindowID id, const wxStr
|
|||
|
||||
bSizer631->Add( 0, 4, 0, wxEXPAND, 5 );
|
||||
|
||||
m_staticTextMain = new wxStaticText( this, wxID_ANY, _("Copyright (c) 2009-2010 Satoshi Nakamoto.\n\nDistributed under the MIT/X11 software license, see the accompanying file \nlicense.txt or http://www.opensource.org/licenses/mit-license.php.\n\nThis product includes software developed by the OpenSSL Project for use in the \nOpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \nEric Young (eay@cryptsoft.com)."), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextMain = new wxStaticText( this, wxID_ANY, _("Copyright (c) 2009-2010 Satoshi Nakamoto.\n\nThis is experimental software.\n\nDistributed under the MIT/X11 software license, see the accompanying file \nlicense.txt or http://www.opensource.org/licenses/mit-license.php.\n\nThis product includes software developed by the OpenSSL Project for use in the \nOpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \nEric Young (eay@cryptsoft.com)."), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextMain->Wrap( -1 );
|
||||
bSizer631->Add( m_staticTextMain, 0, wxALL, 5 );
|
||||
|
||||
|
|
2
uibase.h
2
uibase.h
|
@ -227,7 +227,7 @@ class CAboutDialogBase : public wxDialog
|
|||
|
||||
public:
|
||||
wxStaticText* m_staticTextVersion;
|
||||
CAboutDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About Bitcoin"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 532,315 ), long style = wxDEFAULT_DIALOG_STYLE );
|
||||
CAboutDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About Bitcoin"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 532,329 ), long style = wxDEFAULT_DIALOG_STYLE );
|
||||
~CAboutDialogBase();
|
||||
|
||||
};
|
||||
|
|
|
@ -2866,7 +2866,7 @@
|
|||
<property name="minimum_size"></property>
|
||||
<property name="name">CAboutDialogBase</property>
|
||||
<property name="pos"></property>
|
||||
<property name="size">532,315</property>
|
||||
<property name="size">532,329</property>
|
||||
<property name="style">wxDEFAULT_DIALOG_STYLE</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="title">About Bitcoin</property>
|
||||
|
@ -3130,7 +3130,7 @@
|
|||
<property name="font"></property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Copyright (c) 2009-2010 Satoshi Nakamoto.

Distributed under the MIT/X11 software license, see the accompanying file 
license.txt or http://www.opensource.org/licenses/mit-license.php.

This product includes software developed by the OpenSSL Project for use in the 
OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by 
Eric Young (eay@cryptsoft.com).</property>
|
||||
<property name="label">Copyright (c) 2009-2010 Satoshi Nakamoto.

This is experimental software.

Distributed under the MIT/X11 software license, see the accompanying file 
license.txt or http://www.opensource.org/licenses/mit-license.php.

This product includes software developed by the OpenSSL Project for use in the 
OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by 
Eric Young (eay@cryptsoft.com).</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">m_staticTextMain</property>
|
||||
|
|
80
util.cpp
80
util.cpp
|
@ -20,13 +20,13 @@ bool fCommandLine = false;
|
|||
|
||||
|
||||
// Init openssl library multithreading support
|
||||
static wxMutex** ppmutexOpenSSL;
|
||||
static boost::interprocess::interprocess_mutex** ppmutexOpenSSL;
|
||||
void locking_callback(int mode, int i, const char* file, int line)
|
||||
{
|
||||
if (mode & CRYPTO_LOCK)
|
||||
ppmutexOpenSSL[i]->Lock();
|
||||
ppmutexOpenSSL[i]->lock();
|
||||
else
|
||||
ppmutexOpenSSL[i]->Unlock();
|
||||
ppmutexOpenSSL[i]->unlock();
|
||||
}
|
||||
|
||||
// Init
|
||||
|
@ -36,9 +36,9 @@ public:
|
|||
CInit()
|
||||
{
|
||||
// Init openssl library multithreading support
|
||||
ppmutexOpenSSL = (wxMutex**)OPENSSL_malloc(CRYPTO_num_locks() * sizeof(wxMutex*));
|
||||
ppmutexOpenSSL = (boost::interprocess::interprocess_mutex**)OPENSSL_malloc(CRYPTO_num_locks() * sizeof(boost::interprocess::interprocess_mutex*));
|
||||
for (int i = 0; i < CRYPTO_num_locks(); i++)
|
||||
ppmutexOpenSSL[i] = new wxMutex();
|
||||
ppmutexOpenSSL[i] = new boost::interprocess::interprocess_mutex();
|
||||
CRYPTO_set_locking_callback(locking_callback);
|
||||
|
||||
#ifdef __WXMSW__
|
||||
|
@ -152,7 +152,7 @@ inline int OutputDebugStringF(const char* pszFormat, ...)
|
|||
if (fileout)
|
||||
{
|
||||
//// Debug print useful for profiling
|
||||
//fprintf(fileout, " %"PRI64d" ", wxGetLocalTimeMillis().GetValue());
|
||||
//fprintf(fileout, " %"PRI64d" ", GetTimeMillis());
|
||||
va_list arg_ptr;
|
||||
va_start(arg_ptr, pszFormat);
|
||||
ret = vfprintf(fileout, pszFormat, arg_ptr);
|
||||
|
@ -521,6 +521,69 @@ void PrintException(std::exception* pex, const char* pszThread)
|
|||
|
||||
|
||||
|
||||
#ifdef __WXMSW__
|
||||
typedef WINSHELLAPI BOOL (WINAPI *PSHGETSPECIALFOLDERPATHA)(HWND hwndOwner, LPSTR lpszPath, int nFolder, BOOL fCreate);
|
||||
|
||||
string MyGetSpecialFolderPath(int nFolder, bool fCreate)
|
||||
{
|
||||
char pszPath[MAX_PATH+100] = "";
|
||||
|
||||
// SHGetSpecialFolderPath isn't always available on old Windows versions
|
||||
HMODULE hShell32 = LoadLibraryA("shell32.dll");
|
||||
if (hShell32)
|
||||
{
|
||||
PSHGETSPECIALFOLDERPATHA pSHGetSpecialFolderPath =
|
||||
(PSHGETSPECIALFOLDERPATHA)GetProcAddress(hShell32, "SHGetSpecialFolderPathA");
|
||||
if (pSHGetSpecialFolderPath)
|
||||
(*pSHGetSpecialFolderPath)(NULL, pszPath, nFolder, fCreate);
|
||||
FreeModule(hShell32);
|
||||
}
|
||||
|
||||
// Backup option
|
||||
if (pszPath[0] == '\0')
|
||||
{
|
||||
if (nFolder == CSIDL_STARTUP)
|
||||
{
|
||||
strcpy(pszPath, getenv("USERPROFILE"));
|
||||
strcat(pszPath, "\\Start Menu\\Programs\\Startup");
|
||||
}
|
||||
else if (nFolder == CSIDL_APPDATA)
|
||||
{
|
||||
strcpy(pszPath, getenv("APPDATA"));
|
||||
}
|
||||
}
|
||||
|
||||
return pszPath;
|
||||
}
|
||||
#endif
|
||||
|
||||
string GetDefaultDataDir()
|
||||
{
|
||||
// Windows: C:\Documents and Settings\username\Application Data\Appname
|
||||
// Mac: ~/Library/Application Support/Appname
|
||||
// Unix: ~/.appname
|
||||
#ifdef __WXMSW__
|
||||
// Windows
|
||||
return MyGetSpecialFolderPath(CSIDL_APPDATA, true) + "\\Bitcoin";
|
||||
#else
|
||||
char* pszHome = getenv("HOME");
|
||||
if (pszHome == NULL || strlen(pszHome) == 0)
|
||||
pszHome = (char*)"/";
|
||||
string strHome = pszHome;
|
||||
if (strHome[strHome.size()-1] != '/')
|
||||
strHome += '/';
|
||||
#ifdef __WXOSX__
|
||||
// Mac
|
||||
strHome += "Library/Application Support/";
|
||||
_mkdir(strHome.c_str());
|
||||
return strHome + "Bitcoin";
|
||||
#else
|
||||
// Unix
|
||||
return strHome + ".bitcoin";
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void GetDataDir(char* pszDir)
|
||||
{
|
||||
// pszDir must be at least MAX_PATH length.
|
||||
|
@ -538,11 +601,6 @@ void GetDataDir(char* pszDir)
|
|||
{
|
||||
// This can be called during exceptions by printf, so we cache the
|
||||
// value so we don't have to do memory allocations after that.
|
||||
// wxStandardPaths::GetUserDataDir
|
||||
// Return the directory for the user-dependent application data files:
|
||||
// Unix: ~/.appname
|
||||
// Windows: C:\Documents and Settings\username\Application Data\appname
|
||||
// Mac: ~/Library/Application Support/appname
|
||||
static char pszCachedDir[MAX_PATH];
|
||||
if (pszCachedDir[0] == 0)
|
||||
{
|
||||
|
|
18
util.h
18
util.h
|
@ -141,6 +141,9 @@ void ParseParameters(int argc, char* argv[]);
|
|||
const char* wxGetTranslation(const char* psz);
|
||||
int GetFilesize(FILE* file);
|
||||
void GetDataDir(char* pszDirRet);
|
||||
#ifdef __WXMSW__
|
||||
string MyGetSpecialFolderPath(int nFolder, bool fCreate);
|
||||
#endif
|
||||
string GetDataDir();
|
||||
void ShrinkDebugFile();
|
||||
uint64 GetRand(uint64 nMax);
|
||||
|
@ -174,13 +177,13 @@ public:
|
|||
bool TryEnter() { return TryEnterCriticalSection(&cs); }
|
||||
#else
|
||||
protected:
|
||||
wxMutex mutex;
|
||||
boost::interprocess::interprocess_recursive_mutex mutex;
|
||||
public:
|
||||
explicit CCriticalSection() : mutex(wxMUTEX_RECURSIVE) { }
|
||||
explicit CCriticalSection() { }
|
||||
~CCriticalSection() { }
|
||||
void Enter() { mutex.Lock(); }
|
||||
void Leave() { mutex.Unlock(); }
|
||||
bool TryEnter() { return mutex.TryLock() == wxMUTEX_NO_ERROR; }
|
||||
void Enter() { mutex.lock(); }
|
||||
void Leave() { mutex.unlock(); }
|
||||
bool TryEnter() { return mutex.try_lock(); }
|
||||
#endif
|
||||
public:
|
||||
const char* pszFile;
|
||||
|
@ -324,7 +327,8 @@ inline int64 PerformanceCounter()
|
|||
|
||||
inline int64 GetTimeMillis()
|
||||
{
|
||||
return wxGetLocalTimeMillis().GetValue();
|
||||
return (posix_time::ptime(posix_time::microsec_clock::universal_time()) -
|
||||
posix_time::ptime(gregorian::date(1970,1,1))).total_milliseconds();
|
||||
}
|
||||
|
||||
inline string DateTimeStrFormat(const char* pszFormat, int64 nTime)
|
||||
|
@ -513,7 +517,7 @@ inline pthread_t CreateThread(void(*pfn)(void*), void* parg, bool fWantHandle=fa
|
|||
return hthread;
|
||||
}
|
||||
|
||||
#define THREAD_PRIORITY_LOWEST PRIO_MIN
|
||||
#define THREAD_PRIORITY_LOWEST PRIO_MAX
|
||||
#define THREAD_PRIORITY_BELOW_NORMAL 2
|
||||
#define THREAD_PRIORITY_NORMAL 0
|
||||
#define THREAD_PRIORITY_ABOVE_NORMAL 0
|
||||
|
|
Loading…
Reference in a new issue