Dedicated getline() thread on windows for async reading of stdin.

This commit is contained in:
Travis Burtrum 2011-07-28 16:16:11 -04:00 committed by moparisthebest
parent 77d363fa0a
commit 09146d7e71
3 changed files with 33 additions and 31 deletions

View File

@ -1,5 +1,12 @@
#!/bin/bash
# all working at revision 5346
if [ "$1" == "win" ]; then
echo "building windows then pushing to killer3"
bjam gcc-win32 "cflags=-DTORRENT_USE_I2P=0 -DBOOST_NO_EXCEPTIONS=1" link=static boost=source target-os=windows encryption=tommath variant=release geoip=off logging=none threadapi=win32 iconv=off deprecated-functions=off java_client
i586-mingw32msvc-strip bin/gcc-mingw-win32/release/boost-source/deprecated-functions-off/iconv-off/link-static/target-os-windows/threadapi-win32/threading-multi/java_client.exe
scp bin/gcc-mingw-win32/release/boost-source/deprecated-functions-off/iconv-off/link-static/target-os-windows/threadapi-win32/threading-multi/java_client.exe mopar@killer3:/home/mopar/java_client/java_client.win32.exe
exit 0
fi
if [ "$1" == "clean" ]; then
echo "cleaning previous builds"
rm -rf ./bin/ /home/mopar/biggerdaddy/libtorrent/libtorrent-rasterbar-trunk/trunk/bin /home/mopar/biggerdaddy/libtorrent/boost_1_46_0/bin.v2/

View File

@ -79,42 +79,37 @@ void debug( const char* format, ... ) {
#endif
#include <windows.h>
#include <conio.h>
#include <process.h>
std::string thread_char;
bool thread_running = false;
void Thread( void* pParams )
{
// waits for enter to be pressed, doesn't include newline
//std::cin >> thread_char;
std::getline(std::cin, thread_char);
thread_running = false;
}
bool sleep_and_input(char* c, int sleep)
{
void *input = GetStdHandle(STD_INPUT_HANDLE);
int wait_result = WaitForSingleObject(input, sleep*1000);
if (wait_result == WAIT_TIMEOUT) {
/* it timed out - no input */
debug("wait timed out, no input");
if(thread_running){
Sleep(sleep*1000);
return false;
} else if (wait_result == WAIT_OBJECT_0){
/* it signaled in time - input available */
*c = _getch();
}
if(!thread_char.empty()){
//strncpy(c, &thread_char, 1);
thread_char.copy(c,1,0);
thread_char.clear();
// we don't want to start the thread again here, since after we return from
// this function we might want to read from stdin someplace else
return true;
} else if (wait_result == WAIT_FAILED || wait_result == WAIT_ABANDONED) {
/* some shit went wrong */
debug("somethting went wrong with wait");
return false;
}
thread_running = true;
_beginthread(Thread, 0, NULL);
return false;
};
/*
bool sleep_and_input(char* c, int sleep)
{
for (int i = 0; i < sleep * 2; ++i)
{
if (_kbhit())
{
*c = _getch();
return true;
}
Sleep(500);
}
return false;
};
*/
#else
#define EXE ""
@ -193,7 +188,7 @@ void signal_callback_handler(int signum){
const std::string tag_delim(": ");
int die_timeout = 10;
int die_timeout = 5;
int allocation_mode = libtorrent::storage_mode_sparse;
//float preferred_ratio = 0.f;
float preferred_ratio = 1.f;
@ -469,7 +464,7 @@ void fatal_error(const char* error = 0){
" seconds between screen refreshes, default 1.\n"
" -q forces the client to print every -F seconds, instead of\n"
" only when with 'r' is pressed\n"
" -e <timeout> Waits (timeout * -F) and quits if 'r' is not pressed, default 10.\n"
" -e <timeout> Waits (timeout * -F) and quits if 'r' is not pressed, default 5.\n"
" -n announce to trackers in all tiers\n"
" -t announce to all trackers\n"
" -h allow multiple connections from the same IP\n"

View File

@ -25,7 +25,7 @@ package org.moparscape.res.impl;
*/
public class BTDownloaderCRCs {
private static final long[] crcs = new long[]{1388496215L /*-java_client.linux.x86*/, 3350772002L /*-java_client.osx.i386*/, 1847997845L /*-java_client.osx.ppc*/, 3985172341L /*-java_client.win32.exe*/};
private static final long[] crcs = new long[]{3304301470L /*-java_client.linux.x86*/, 21879546L /*-java_client.osx.i386*/, 4003616367L /*-java_client.osx.ppc*/, 3354565870L /*-java_client.win32.exe*/};
public static final int LINUX = 0;
public static final int OSX386 = 1;