Dalam kasus saya, menulis S membantu leep dan BUKAN s leep - sangat aneh, tapi berhasil!
Sleep
adalah fungsi Windows.
Untuk Unix, lihat menggunakan nanosleep
(POSIX) atau usleep
(BSD; usang).
A nanosleep
contoh:
void my_sleep(unsigned msec) {
struct timespec req, rem;
int err;
req.tv_sec = msec / 1000;
req.tv_nsec = (msec % 1000) * 1000000;
while ((req.tv_sec != 0) || (req.tv_nsec != 0)) {
if (nanosleep(&req, &rem) == 0)
break;
err = errno;
// Interrupted; continue
if (err == EINTR) {
req.tv_sec = rem.tv_sec;
req.tv_nsec = rem.tv_nsec;
}
// Unhandleable error (EFAULT (bad pointer), EINVAL (bad timeval in tv_nsec), or ENOSYS (function not supported))
break;
}
}
Anda membutuhkan <time.h>
dan <errno.h>
, tersedia dalam C++ sebagai <ctime>
dan <cerrno>
.
usleep
lebih mudah digunakan (kalikan saja dengan 1000, jadi jadikan itu fungsi inline). Namun, tidak mungkin untuk menjamin bahwa tidur akan terjadi untuk jangka waktu tertentu, sudah usang, dan Anda perlu extern "C" { }
-termasuk <unistd.h>
.
Pilihan ketiga adalah menggunakan select
dan struct timeval
, seperti yang terlihat di http://source.winehq.org/git/wine.git/blob/HEAD:/dlls/ntdll/sync.c#l1204 (beginilah cara wine mengemulasi Sleep
, yang itu sendiri hanyalah pembungkus untuk SleepEx
).
Catatan :sleep
(huruf kecil 's'), yang deklarasinya ada di <unistd.h>
, tidak pengganti yang dapat diterima, karena perinciannya adalah detik, lebih kasar daripada Sleep
Windows (huruf besar 's'), yang memiliki perincian milidetik.
Mengenai kesalahan kedua Anda, ___XXXcall
adalah token khusus MSVC++ (sebagaimana __dllXXX
, __naked
, __inline
, dll.). Jika Anda benar-benar perlu stdcall, gunakan __attribute__((stdcall))
atau mirip dengan menirunya di gcc.
Catatan :kecuali target kompilasi Anda adalah biner Windows dan Anda menggunakan API Win32, penggunaan atau persyaratan untuk stdcall
adalah Tanda Buruk™.
#include <iostream>
#include <unistd.h>
using namespace std;
int main()
{
const long a=1000000;
long j;
cin >> j;
usleep(a*j);
puts("exit");
}
gunakan usleep()
Sebelum tidur dan Jangan lupa Sertakan unistd.h
(Bukan cunistd
)
Cara menggunakan usleep dalam program C++ di linux:
Masukkan ini ke dalam file bernama s.cpp
#include <iostream>
#include <unistd.h>
using namespace std;
int main() {
cout << "nitrate";
cout << flush;
usleep(1000000);
cout << "firtilizers";
return 0;
}
Kompilasi dan jalankan:
[email protected] ~/foo4/40_usleep $ g++ -o s s.cpp
[email protected] ~/foo4/40_usleep $ ./s
nitratefirtilizers
Itu mencetak 'nitrat', menunggu 1 detik, lalu mencetak 'firtilizers'