다이얼로그 버튼 일정시간 간격마다 반복하는 방법이 있나요?

201413694의 이미지

사진에서 '보내기'버튼을 클릭하면 데이터가 전송됩니다.

데이터를 일정 시간 간격마다 보내고 싶습니다.

'보내기'버튼을 일정 시간 간격마다 직접 누르는것은 제외하고

데이터를 일정 시간 간격마다 보낼 수 있는 방법이 있나요?

*IDC_EDIT1이 공백일때 보내기 버튼을 눌러도 데이터는 이상없이 잘 전송됩니다.
코드를 짤때 입력이 없어서 특정 패킷을 보내도록 작성했습니다.
굳이 IDC_EDIT1이랑 보내기 버튼을 만들어놓은건 책의 채팅프로그램을 변형시켜만들다보니 유지된것입니다.

File attachments: 
첨부파일 크기
Image icon 제목 없음.png151.61 KB
Image icon 제목 없음2.png58.08 KB
Image icon 제목 없음3.png57.13 KB
세벌의 이미지

Timer 를 쓰면 될 것 같습니다.
보내기 버튼 눌렀을 때 무엇을 할 건지 코드는 이미 만드신 것 같고...
Timer 에서 일정시간이 지난 후 보내기 하도록 하시면 될 것 같네요.
질문하신 분이 쓰려는 프로그램 언어가 뭔지 모르겠는데, 해당 언어에서 Timer 관련 검색해보면 힌트가 나올 거 같네요.
첨부파일 이름이 제목없음인가요? 제목만 보고 내용을 예측하도록 파일이름도 잘 만들어 주시면 더 좋겠고요.

https://wiki.kldp.org/wiki.php/DocbookSgml/Beginner_QA-KLDP#AEN70
참고하셔요.

201413694의 이미지

c언어로 작성하였습니다. TCP/IP 윈도우 소켓프로그래밍을 바탕으로 코딩하였고
콘솔이 아닌 다이얼로그 형식으로 나타나도록 코딩했습니다.

콘솔에서는 while(time>0){ send() recv() Sleep(10000); }을 통해서 1초 마다 send를 작동시킬 수 있었습니다.
다이얼로그에서는 [앞부분] while(1){ send() recv() Sleep(1000); } 을 통해서 같은 방식을 사용하려고 합니다.

BOOL CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg) {
	case WM_INITDIALOG:
		hEdit1 = GetDlgItem(hDlg, IDC_EDIT1);
		hEdit2 = GetDlgItem(hDlg, IDC_EDIT2);
		hSendButton = GetDlgItem(hDlg, IDOK); //보내기 버튼,전역 변수에 핸들 값을 저장해둔것
		SendMessage(hEdit1, EM_SETLIMITTEXT, BUFSIZE, 0);
		return TRUE;
 
	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDOK:
			EnableWindow(hSendButton, FALSE);  //보내기 버튼 비활성화
			WaitForSingleObject(hReadEvent, INFINITE);  //읽기 완료 대기
			GetDlgItemText(hDlg, IDC_EDIT1, buf, BUFSIZE + 1);
			SetEvent(hWriteEvent); //쓰기 완료 알림
			SetFocus(hEdit1);
			SendMessage(hEdit1, EM_SETSEL, 0, -1);
			return TRUE;
		case IDCANCEL:
			EndDialog(hDlg, IDCANCEL);
			return TRUE;
		}
		return FALSE;
	}
	return FALSE;
}
 
void DisplayText(char *fmt, ...) //출력 함수
{
	va_list arg;
	va_start(arg, fmt);
 
	char cbuf[BUFSIZE + 256];
	vsprintf(cbuf, fmt, arg);
 
 
	int nLength = GetWindowTextLength(hEdit2);
	SendMessage(hEdit2, EM_SETSEL, nLength, nLength);
	SendMessage(hEdit2, EM_REPLACESEL, FALSE, (LPARAM)cbuf);
 
	va_end(arg);
}

이런 코드를 사용했습니다.
채팅프로그램을 임의로 수정하여서 만들다보니 IDC_EDIT1을 입력하지않고 '보내기'버튼을
사용해도 데이터전송이 가능합니다.
while(1)을 사용했기에 보내기버튼을 누를때마다 작동이 됩니다.

보내기버튼을 일정시간마다 눌려지면 해결될 문제인데 해결법을 모르겠습니다.

Yi Soo An@Google의 이미지

보내기 버튼을 누르면 발생되는 event signal에 따라 처리하도록 하는 callback 함수가 있을 것입니다. 그걸 알아내서 다른 쓰레드를 만들고 거기서 특정 시간마다 해당 callback을 호출하시면 될 것 같습니다. gui를 담당하는 main context에서 delay를 이용해 처리하도록 하지마세요. gui는 사용자와 매 순간 인터페이싱해야 합니다.

해결하셨다는 글을 이제야 봤네요.. 이런.. ㅠ

---------------
Happy Hacking!

shint의 이미지

파일 첨부.

댓글 첨부 파일: 

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

201413694의 이미지

감사합니다. 문제 해결되었습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.