Added a new portable sleep API(ABI compatible). Now features a flexible multi-usage sleep() api accepting decimals, msleep() for millisecs only, usleep() for microsecs. Updated Makefiles, cmakefiles, vs2008, vs2010 with the new Fl_sleep add-on. Documented new API. still needs to be added in Xcode.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@10150 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
2c820fd53d
commit
54b0123eab
10
FL/Fl.H
10
FL/Fl.H
@ -1075,6 +1075,16 @@ public:
|
||||
static void awake(void* message = 0);
|
||||
/** See void awake(void* message=0). */
|
||||
static int awake(Fl_Awake_Handler cb, void* message = 0);
|
||||
|
||||
// Cross platform sleep API
|
||||
|
||||
/** flexible sleep function in seconds, accepts decimals typically up to 100usec resolution (depends on your hardware) */
|
||||
static void sleep(double seconds);
|
||||
/** milli seconds sleep */
|
||||
static void msleep(unsigned long milliseconds);
|
||||
/** microseconds sleep */
|
||||
static void usleep(unsigned long long microseconds);
|
||||
|
||||
/**
|
||||
The thread_message() method returns the last message
|
||||
that was sent from a child by the awake() method.
|
||||
|
@ -3660,6 +3660,52 @@
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\Fl_sleep.cxx"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
FavorSizeOrSpeed="0"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug Cairo|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release Cairo|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
FavorSizeOrSpeed="0"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\Fl_Menu.cxx"
|
||||
>
|
||||
|
@ -3392,6 +3392,48 @@
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\Fl_sleep.cxx"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug Cairo|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release Cairo|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\Fl_Menu.cxx"
|
||||
|
@ -291,6 +291,7 @@
|
||||
<ClInclude Include="..\..\FL\Fl_XPM_Image.H" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\src\Fl_sleep.cxx" />
|
||||
<ClCompile Include="..\..\src\xutf8\case.c" />
|
||||
<ClCompile Include="..\..\src\filename_absolute.cxx">
|
||||
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
|
||||
@ -2453,4 +2454,4 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
</Project>
|
@ -517,5 +517,6 @@
|
||||
<ClCompile Include="..\..\src\scandir.c" />
|
||||
<ClCompile Include="..\..\src\screen_xywh.cxx" />
|
||||
<ClCompile Include="..\..\src\vsnprintf.c" />
|
||||
<ClCompile Include="..\..\src\Fl_sleep.cxx" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
@ -90,6 +90,7 @@ set(CPPFILES
|
||||
Fl_get_system_colors.cxx
|
||||
Fl_grab.cxx
|
||||
Fl_lock.cxx
|
||||
Fl_sleep.cxx
|
||||
Fl_own_colormap.cxx
|
||||
Fl_visual.cxx
|
||||
Fl_x.cxx
|
||||
|
68
src/Fl_sleep.cxx
Normal file
68
src/Fl_sleep.cxx
Normal file
@ -0,0 +1,68 @@
|
||||
//
|
||||
// "$Id: Fl_sleep.cxx $"
|
||||
//
|
||||
// Multi-threading support code for the Fast Light Tool Kit (FLTK).
|
||||
//
|
||||
// Copyright 1998-2010 by Bill Spitzak and others.
|
||||
//
|
||||
// This library is free software. Distribution and use rights are outlined in
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
//
|
||||
|
||||
// Cross platform sleep API for FLTK, F. Costantini, May 20th, 2014
|
||||
|
||||
#include <FL/Fl.H>
|
||||
#include <config.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef WIN32
|
||||
#include <windows.h>
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
/** Make the current thread sleep for n seconds, support decimals ... */
|
||||
void Fl::sleep(double seconds)
|
||||
{
|
||||
Fl::usleep((unsigned long long) (seconds*1000000));
|
||||
}
|
||||
|
||||
/** Make the current thread to sleep for n milliseconds */
|
||||
void Fl::msleep(unsigned long milliseconds)
|
||||
{
|
||||
#ifdef WIN32
|
||||
::Sleep( (DWORD) milliseconds);
|
||||
#else
|
||||
::usleep((useconds_t) (milliseconds*1000));
|
||||
#endif
|
||||
}
|
||||
|
||||
/** Make the current thread to sleep for n microseconds */
|
||||
void Fl::usleep(unsigned long long microseconds)
|
||||
// unsigned long long more should be more portable than int64_t before c++ 2011 ...
|
||||
{
|
||||
#ifdef WIN32
|
||||
HANDLE timer;
|
||||
LARGE_INTEGER reltime;
|
||||
|
||||
reltime.QuadPart = (LONGLONG) -(10*microseconds); // Convert to 100 nanosecond relative time interval
|
||||
timer = CreateWaitableTimer(NULL, TRUE, NULL);
|
||||
SetWaitableTimer(timer, &reltime, 0, NULL, NULL, 0);
|
||||
WaitForSingleObject(timer, INFINITE);
|
||||
CloseHandle(timer);
|
||||
#else
|
||||
::usleep((useconds_t) microseconds);
|
||||
#endif
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id: $".
|
||||
//
|
@ -106,6 +106,7 @@ CPPFILES = \
|
||||
Fl_get_system_colors.cxx \
|
||||
Fl_grab.cxx \
|
||||
Fl_lock.cxx \
|
||||
Fl_sleep.cxx \
|
||||
Fl_own_colormap.cxx \
|
||||
Fl_visual.cxx \
|
||||
Fl_x.cxx \
|
||||
@ -157,13 +158,13 @@ CPPFILES = \
|
||||
screen_xywh.cxx \
|
||||
fl_utf8.cxx \
|
||||
ps_image.cxx
|
||||
|
||||
|
||||
OBJCPPFILES = \
|
||||
Fl_cocoa.mm \
|
||||
Fl_Quartz_Printer.mm \
|
||||
Fl_Native_File_Chooser_MAC.mm \
|
||||
Fl_Sys_Menu_Bar.mm
|
||||
|
||||
|
||||
FLCPPFILES = \
|
||||
forms_compatability.cxx \
|
||||
forms_bitmap.cxx \
|
||||
|
@ -418,18 +418,19 @@ SudokuSound::audio_cb(AudioDeviceID device,
|
||||
}
|
||||
#endif // __APPLE__
|
||||
|
||||
#define NOTE_DURATION_MS 50
|
||||
|
||||
// Play a note for 250ms...
|
||||
void SudokuSound::play(char note) {
|
||||
Fl::check();
|
||||
|
||||
|
||||
#ifdef __APPLE__
|
||||
// Point to the next note...
|
||||
data = sample_data[note - 'A'];
|
||||
remaining = sample_size * 2;
|
||||
|
||||
// Wait for the sound to complete...
|
||||
usleep(50000);
|
||||
Fl::msleep(NOTE_DURATION_MS);
|
||||
|
||||
#elif defined(WIN32)
|
||||
if (sample_size) {
|
||||
@ -437,8 +438,8 @@ void SudokuSound::play(char note) {
|
||||
|
||||
waveOutWrite(device, header_ptr, sizeof(WAVEHDR));
|
||||
|
||||
Sleep(50);
|
||||
} else Beep(frequencies[note - 'A'], 50);
|
||||
Fl::msleep(NOTE_DURATION_MS);
|
||||
} else Beep(frequencies[note - 'A'], NOTE_DURATION_MS);
|
||||
|
||||
#else
|
||||
# ifdef HAVE_ALSA_ASOUNDLIB_H
|
||||
@ -448,7 +449,7 @@ void SudokuSound::play(char note) {
|
||||
snd_pcm_prepare(handle);
|
||||
snd_pcm_writei(handle, sample_data[note - 'A'], sample_size);
|
||||
}
|
||||
usleep(50000);
|
||||
Fl::msleep(NOTE_DURATION_MS);
|
||||
return;
|
||||
}
|
||||
# endif // HAVE_ALSA_ASOUNDLIB_H
|
||||
@ -463,7 +464,7 @@ void SudokuSound::play(char note) {
|
||||
// Sound a tone for the given note...
|
||||
control.bell_percent = 100;
|
||||
control.bell_pitch = frequencies[note - 'A'];
|
||||
control.bell_duration = 50;
|
||||
control.bell_duration = NOTE_DURATION_MS;
|
||||
|
||||
XChangeKeyboardControl(fl_display,
|
||||
KBBellPercent | KBBellPitch | KBBellDuration,
|
||||
|
Loading…
x
Reference in New Issue
Block a user