Skip to content

Commit ddf77c8

Browse files
committed
sleep: header, print fail reason
1 parent d70ef7d commit ddf77c8

File tree

4 files changed

+22
-12
lines changed

4 files changed

+22
-12
lines changed

src/sleep/sleep.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
#include <errno.h>
99
#endif
1010

11+
#include "sleep.h"
1112

12-
void c_sleep(int);
1313

1414
// https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-sleep
15-
void c_sleep(int milliseconds)
15+
void c_sleep(const int milliseconds)
1616
{
1717

1818
#ifdef _MSC_VER

src/sleep/sleep.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
#include <chrono>
22
#include <thread>
33

4-
extern "C" void c_sleep(int);
4+
#include "sleep.h"
55

6-
void c_sleep(int milliseconds)
7-
{
6+
void c_sleep(const int milliseconds) {
87
std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
98
}

test/sleep/CMakeLists.txt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@ set_property(DIRECTORY PROPERTY LABELS sleep)
22

33
add_library(f_sleep OBJECT ${PROJECT_SOURCE_DIR}/src/sleep/sleep_std.f90)
44

5-
add_library(c_f_sleep ${PROJECT_SOURCE_DIR}/src/sleep/sleep.c)
6-
target_link_libraries(c_f_sleep PRIVATE f_sleep)
7-
add_library(cpp_f_sleep ${PROJECT_SOURCE_DIR}/src/sleep/sleep.cpp)
8-
target_link_libraries(cpp_f_sleep PRIVATE f_sleep)
5+
# not OBJECT so include propagates
6+
add_library(c_f_sleep ${PROJECT_SOURCE_DIR}/src/sleep/sleep.c $<TARGET_OBJECTS:f_sleep>)
7+
target_include_directories(c_f_sleep PUBLIC ${PROJECT_SOURCE_DIR}/src/sleep)
8+
9+
# not OBJECT so include propagates
10+
add_library(cpp_f_sleep ${PROJECT_SOURCE_DIR}/src/sleep/sleep.cpp $<TARGET_OBJECTS:f_sleep>)
11+
target_include_directories(cpp_f_sleep PUBLIC ${PROJECT_SOURCE_DIR}/src/sleep)
912

1013
add_executable(fortran_c_sleep test_sleep.f90)
1114
target_link_libraries(fortran_c_sleep PRIVATE c_f_sleep)

test/sleep/test_sleep.f90

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
program sleep_demo
22

3-
use, intrinsic :: iso_fortran_env, only : int64
3+
use, intrinsic :: iso_fortran_env, only : int64, stderr => error_unit
44

55
use sleep_std, only : sleep_ms
66

@@ -28,8 +28,16 @@ program sleep_demo
2828

2929
t_ms = real(toc-tic) * 1000. / real(trate)
3030

31-
if (t_ms < 0.5 * millisec) error stop 'actual sleep time was too short'
32-
if (t_ms > 2 * millisec) error stop 'actual sleep time was too long'
31+
if (t_ms < 0.5 * millisec) then
32+
!> slept less than half expected time
33+
write(stderr, '(a, f9.6)') 'ERROR: measured sleep time too short (millisec): ', t_ms
34+
error stop
35+
endif
36+
if (t_ms > 2 * millisec) then
37+
!> slept more than twice expected time
38+
write(stderr, '(a, f9.6)') 'ERROR: measure sleep time too long (millisec): ', t_ms
39+
error stop
40+
endif
3341

3442
print '(A, F6.1)', 'OK: test_sleep: slept for (ms): ', t_ms
3543

0 commit comments

Comments
 (0)