making a wait in milliseconds function?

Oct 26, 2009 at 1:14am
For my class I have to make the game snake. And I have the snake drawing with linked lists correctly and it all works pretty well except it draws everything way too fast.... By the way this is in C, not C++

So I need some sort of wait function... I found
void wait ( int seconds ){
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
}


on the site, but could not get it to work.And I included stdlib and time.h.
But im not that great of a programmer, so if someone could help me with this function I think I got the rest of the homework down.

thanks!
Oct 26, 2009 at 1:36am
If it's for windows you could try Sleep(); inside windows.h

but if you're sane, then you'll want to make sure that CLOCKS_PER_SEC is valid (should be 1000 IIRC)

Post your errors?
Oct 26, 2009 at 1:37am
I tried including windows.h

#include <windows.h>
and it says it cant find it....

maybe its cause we are using eclipse and not visual studios?
Last edited on Oct 26, 2009 at 1:41am
Oct 26, 2009 at 1:51am
then you'll want to make sure that CLOCKS_PER_SEC is valid
What? How could it not be valid? I guess if it was zero or negative, but the function should work for any positive value of CLOCKS_PER_SEC. And what the hell kind of implementation would have CLOCKS_PER_SEC<=0?

ICANSEEYOU7687: You are using Windows, right? Not Linux? Because that header, as its name suggests, only exists for Windows. Other than that, I don't know what could be failing. Every compiler for Windows except Cygwin comes with windows.h. Maybe you need to set your compiler search paths manually with Eclipse?
Last edited on Oct 26, 2009 at 1:52am
Oct 26, 2009 at 5:15am
A screwed up implementation

Again, error messages would be helpful.
Oct 26, 2009 at 5:24am
yes im using windows, haha windows 7 actually.

But if I cannot get this to work, I may just make a count function, and make an if statement that says something like...

If(count % 3 == 0){
drawsnake()
}

etc....

so only every 3 cycles it would draw the snake.
Oct 26, 2009 at 7:30am
Make a new program - see if something like this works. It could possibly be you're calling something in the wrong spot.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <time.h>

void wait ( int seconds )
{
	clock_t endwait;
	endwait = clock () + seconds * CLOCKS_PER_SEC ;
	while (clock() < endwait) {}
}

int main()
{
	for( int i = 0; i < 10; i++ )
	{
		static int foo = 0;
		printf("Waiting ... %d\n", foo);
		foo++;

		wait(1);
	}

	return 0;
}
Last edited on Oct 26, 2009 at 7:32am
Oct 26, 2009 at 12:25pm
The problem with that delay function is that it spends clock cycles.

Unless you have good reason not to, use the OS forms to delay:
http://www.cplusplus.com/forum/unices/10491/page1.html#msg49054

And, FWIW, "wait" is a really bad name for a function, because it might already be used elsewhere.

Hope this helps.
Oct 26, 2009 at 8:52pm
Erm...couldn't you just get rid of foo and use the value i from the for loop?
Topic archived. No new replies allowed.