banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Thực thi lệnh trong C độc lập với chương trình chính!  XML
  [Programming]   Thực thi lệnh trong C độc lập với chương trình chính! 01/08/2007 05:52:21 (+0700) | #1 | 75513
[Avatar]
le_quoc_bao
Member

[Minus]    0    [Plus]
Joined: 25/07/2007 12:01:48
Messages: 15
Location: Unknown
Offline
[Profile] [PM]
Theo mình biết thì khi một chương trình được thực thi thì nó sẽ quét tuần tự từ trên xuống và từ trái qua phải(không biết có đúng không nữa hì hì...).Vậy cho mình hỏi trong C (chạy trong môi trường Dos) có cách nào khi chạy 1 chương trình thì có 1 lệnh có thể chạy độc lập với chương trình chính được hay không?có nghia là khi thực thi chương trình chính ở một thời điểm nào đó (hoặc khi bắt đầu chương trình) một lệnh (hoặc hàm ) đó được gọi và chạy độc lập với chương trình chính, còn chương trình chính thì sau khi gọi lệnh(hoặc hàm đó) thì vẫn tiếp tục quét các lệnh tiếp theo bất kể là lệnh (hoặc hàm)đó có kết thúc hay chưa.
Mình đã thử dùng lệnh gọi một chương trình khác (trong file khác )chạy song song nhưng chương trình chính vẫn đợi chương trình sau chạy xong thì mới thực thi tiếp tục.Ai biết giúp mình với smilie-)) .
Mục đích của mình là khi thực thi một chương trình thì bắt đầu hẹn giờ nếu sau khoảng thời gian (do mình cài đặt)nếu người dùng không thõa một số điều kiện do chương trình yêu cầu thì chương trình sẽ tự động thực thi lệnh khác.
Thank so much!
[Up] [Print Copy]
  [Question]   Thực thi lệnh trong C độc lập với chương trình chính! 01/08/2007 13:55:34 (+0700) | #2 | 75650
[Avatar]
K4i
Moderator

Joined: 18/04/2006 09:32:13
Messages: 635
Location: Underground
Offline
[Profile] [PM]
Theo mình biết thì khi một chương trình được thực thi thì nó sẽ quét tuần tự từ trên xuống và từ trái qua phải(không biết có đúng không nữa hì hì...) 


==> tức là thế nào, mình kô hiểu. Quét cái gì ở đây.

có cách nào khi chạy 1 chương trình thì có 1 lệnh có thể chạy độc lập với chương trình chính được hay không?có nghia là khi thực thi chương trình chính ở một thời điểm nào đó (hoặc khi bắt đầu chương trình) một lệnh (hoặc hàm ) đó được gọi và chạy độc lập với chương trình chính, còn chương trình chính thì sau khi gọi lệnh(hoặc hàm đó) thì vẫn tiếp tục quét các lệnh tiếp theo bất kể là lệnh (hoặc hàm)đó có kết thúc hay chưa.
Mình đã thử dùng lệnh gọi một chương trình khác (trong file khác )chạy song song nhưng chương trình chính vẫn đợi chương trình sau chạy xong thì mới thực thi tiếp tục.Ai biết giúp mình với  


==> nghe nó giống kiểu xử lý song song nhỉ. Nếu bạn có nhu cầu tìm hiểu thì tìm đọc về lập trình đa luồng (multithreading). Ở đây, bạn tạo thành 2 chương trình con và tống nó vào 2 luồng (thread) riêng biệt. Việc lập trình đa luồng là một kiến thức khó (đối với những ai chưa nắm rõ ngôn ngữ lập trình). smilie



Mục đích của mình là khi thực thi một chương trình thì bắt đầu hẹn giờ nếu sau khoảng thời gian (do mình cài đặt)nếu người dùng không thõa một số điều kiện do chương trình yêu cầu thì chương trình sẽ tự động thực thi lệnh khác.  


==> trong thời gian đấy, chương trình chính bị dừng lại hay làm việc khác smilie)
Sống là để không chết chứ không phải để trở thành anh hùng
[Up] [Print Copy]
  [Question]   Thực thi lệnh trong C độc lập với chương trình chính! 01/08/2007 13:59:32 (+0700) | #3 | 75651
L0ng3ta
Locked

[Minus]    0    [Plus]
Joined: 17/09/2002 13:47:43
Messages: 264
Location: Địa cầu
Offline
[Profile] [PM]
Lâu lắm rồi không đụng tới C , sẵn topic này ôn lại một vài cái cũng hay:
Bạn có thể tham khảo tại đây:
http://softpixel.com/~cwright/programming/threads/threads.c.php
[Up] [Print Copy]
  [Question]   Thực thi lệnh trong C độc lập với chương trình chính! 01/08/2007 16:34:30 (+0700) | #4 | 75669
MicrosoftX
Member

[Minus]    0    [Plus]
Joined: 04/03/2007 20:46:12
Messages: 91
Offline
[Profile] [PM]

le_quoc_bao wrote:
Theo mình biết thì khi một chương trình được thực thi thì nó sẽ quét tuần tự từ trên xuống và từ trái qua phải(không biết có đúng không nữa hì hì...).Vậy cho mình hỏi trong C (chạy trong môi trường Dos) có cách nào khi chạy 1 chương trình thì có 1 lệnh có thể chạy độc lập với chương trình chính được hay không?có nghia là khi thực thi chương trình chính ở một thời điểm nào đó (hoặc khi bắt đầu chương trình) một lệnh (hoặc hàm ) đó được gọi và chạy độc lập với chương trình chính, còn chương trình chính thì sau khi gọi lệnh(hoặc hàm đó) thì vẫn tiếp tục quét các lệnh tiếp theo bất kể là lệnh (hoặc hàm)đó có kết thúc hay chưa.
Mình đã thử dùng lệnh gọi một chương trình khác (trong file khác )chạy song song nhưng chương trình chính vẫn đợi chương trình sau chạy xong thì mới thực thi tiếp tục.Ai biết giúp mình với smilie-)) .
Mục đích của mình là khi thực thi một chương trình thì bắt đầu hẹn giờ nếu sau khoảng thời gian (do mình cài đặt)nếu người dùng không thõa một số điều kiện do chương trình yêu cầu thì chương trình sẽ tự động thực thi lệnh khác.
Thank so much!
 

Lập ra ứng dụng -> ứng dụng cần được thi hành trên một nền nào đó smilie; do đó mà khả năng và chức năng của ứng dụng cũng phụ thuộc vào khả năng và chức năng của nền smilie

Ứng dụng bạn tạo đc thi hành trên DoS - một môi trường đơn nhiệm. Nên không thể thi hành đa luồng được đâu. Nếu bạn tìm hiểu kĩ ra, DoS được chạy trên các máy tính sử dụng vi xử lý 8086 của Intel. Vi xử lý này không hỗ trợ chế độ bảo vệ, chỉ là xử lý đơn nhiệm. Những vi xử lý đời sau, từ 80286 và đặc biệt từ 80386 trở đi, chế độ bảo vệ (hoạt động đa nhiệm) mới được hỗ trợ.

Những khái niệm như task rồi thread chỉ có ở những hệ thống đa nhiệm.

Nên việc mà bạn muốn chạy một chương trình song song chương trình khác trên môi trường DoS là không thể. Trên môi trường DoS, nếu một ứng dụng đang được thi hành, có nghĩa ứng dụng đó toàn quyền. thực ra mà nói có những chương trình vẫn đang chạy cùng, đó là những ngắt (thường chú trong bộ nhớ), nhưng bản chất hoạt động không phải là multi thread

Do đó mà việc bạn muốn xây dựng một chương trình theo như bạn mô tả, tôi nghĩ là khó khăn đó smilie; trên DoS với C có lẽ ta chỉ dừng ở việc lập trình theo sự kiện mà thôi smilie
[Up] [Print Copy]
  [Question]   Re: Thực thi lệnh trong C độc lập với chương trình chính! 01/08/2007 20:40:37 (+0700) | #5 | 75685
maihoahn
Member

[Minus]    0    [Plus]
Joined: 30/07/2007 20:09:20
Messages: 10
Offline
[Profile] [PM]
Mục đích của mình là khi thực thi một chương trình thì bắt đầu hẹn giờ nếu sau khoảng thời gian (do mình cài đặt)nếu người dùng không thõa một số điều kiện do chương trình yêu cầu thì chương trình sẽ tự động thực thi lệnh khác.

bạn có thể xem cuốn lập trình c của phạm van ất, quấn ấy có bài nói về cách lập trình theo thời gian thực.đây là trích dẫn:
time_hien_tai=getime_hien_tai(..);//lấy thời gian hiện tại
while(1){
time_hien_tai=gettime_hien_tai(.);//lấy lại thời gian hiệntại
if(time_hien_tai>=time_quy_dinh){//nếu thời gian hiện tại
//đạt tới mức quy định thì
time_hien_tai=gettime_hien_tai(..);
..............;//làm 1 diều gì đó
..............;//làm 1 diều gì đó
}
else{
.........;//thực hiện 1 lệnh khác
........;
}
}
[Up] [Print Copy]
  [Question]   Re: Thực thi lệnh trong C độc lập với chương trình chính! 01/08/2007 21:54:03 (+0700) | #6 | 75696
[Avatar]
trinhcongson_us
Member

[Minus]    0    [Plus]
Joined: 19/07/2007 16:09:16
Messages: 15
Location: Hầm rượu
Offline
[Profile] [PM] [Yahoo!]
@le_quoc_bao:
Bồ nên đọc link mà bác l0ng3ta đưa cho, trong đó nói rất kỷ về lập trình đa nhiệm trong dos, và có cả ví dụ nữa.

đoạn chương trình mà bồ cần nghiên cứu là :
Code:
#include <pthread.h>
#include <stdio.h>

/* This is our thread function.  It is like main(), but for a thread*/
void *threadFunc(void *arg)
{
	char *str;
	int i = 0;

	str=(char*)arg;

	while(i < 110 )
	{
		usleep(1);
		printf("threadFunc says: %s\n",str);
		++i;
	}

	return NULL;
}

int main(void)
{
	pthread_t pth;	// this is our thread identifier
	int i = 0;

	pthread_create(&pth,NULL,threadFunc,"foo");
	
	while(i < 100)
	{
		usleep(1);
		printf("main is running...\n");
		++i;
	}

	printf("main waiting for thread to terminate...\n");
	pthread_join(pth,NULL);

	return 0;
}


sau đó thì biến thể chút xíu để ra chương trình của bồ, vì mình ko biết bồ muốn làm gì với chương trình nên ko thể coding ra đây được.

Thân.
[Up] [Print Copy]
  [Question]   Re: Thực thi lệnh trong C độc lập với chương trình chính! 01/08/2007 23:55:44 (+0700) | #7 | 75768
[Avatar]
zeno
Elite Member

[Minus]    0    [Plus]
Joined: 20/07/2004 03:57:09
Messages: 124
Location: HVA
Offline
[Profile] [PM]

trinhcongson_us wrote:
@le_quoc_bao:
Bồ nên đọc link mà bác l0ng3ta đưa cho, trong đó nói rất kỷ về lập trình đa nhiệm trong dos, và có cả ví dụ nữa.

đoạn chương trình mà bồ cần nghiên cứu là :
Code:
#include <pthread.h>
#include <stdio.h>

/* This is our thread function.  It is like main(), but for a thread*/
void *threadFunc(void *arg)
{
	char *str;
	int i = 0;

	str=(char*)arg;

	while(i < 110 )
	{
		usleep(1);
		printf("threadFunc says: %s\n",str);
		++i;
	}

	return NULL;
}

int main(void)
{
	pthread_t pth;	// this is our thread identifier
	int i = 0;

	pthread_create(&pth,NULL,threadFunc,"foo");
	
	while(i < 100)
	{
		usleep(1);
		printf("main is running...\n");
		++i;
	}

	printf("main waiting for thread to terminate...\n");
	pthread_join(pth,NULL);

	return 0;
}


sau đó thì biến thể chút xíu để ra chương trình của bồ, vì mình ko biết bồ muốn làm gì với chương trình nên ko thể coding ra đây được.

Thân. 

Bồ nên phân biệt giữa MultiTasking và MultiThreading,thêm nưa link mà bác L0ng3ta đưa ra đâu phải cho DOS.
[Up] [Print Copy]
  [Question]   Re: Thực thi lệnh trong C độc lập với chương trình chính! 02/08/2007 00:11:00 (+0700) | #8 | 75774
[Avatar]
trinhcongson_us
Member

[Minus]    0    [Plus]
Joined: 19/07/2007 16:09:16
Messages: 15
Location: Hầm rượu
Offline
[Profile] [PM] [Yahoo!]
Uh, đúng rồi, mình đã kiểm tra lại đúng là ko phải cho dos, hix hix :lolsmilie :lolsmilie
Cảm ơn bồ đã nhắc nhở, đúng là mình nhầm lẫn một cách tai hại. smilie(
[Up] [Print Copy]
  [Question]   Thực thi lệnh trong C độc lập với chương trình chính! 02/08/2007 00:56:01 (+0700) | #9 | 75796
rcrackvn
Elite Member

[Minus]    0    [Plus]
Joined: 27/03/2007 02:04:05
Messages: 42
Offline
[Profile] [PM]
mấy cha geek cũng geek vừa vừa thôi, thời buổi này đào đâu ra MSDOS để mà thảo luận. Tui nghĩ ý của OP là làm 1 console app chạy trên 1 DOS emulator
[Up] [Print Copy]
  [Question]   Thực thi lệnh trong C độc lập với chương trình chính! 02/08/2007 05:48:21 (+0700) | #10 | 75866
[Avatar]
eyesdog
Elite Member

[Minus]    0    [Plus]
Joined: 18/01/2002 06:54:01
Messages: 94
Offline
[Profile] [PM]
Trong Dos nếu muốn là được như ý le_quoc_bao thì phải chặn ngắt thời gian, cách thực hiện có thể tham khảo trong cuốn sách của Peter Norton về cấu trúc máy tính. Cái này đã quá lâu rồi, lần đầu tiên làm được vào năm 95-96 gì đó nên giờ chỉ nhớ có thế.
[Up] [Print Copy]
  [Question]   Re: Thực thi lệnh trong C độc lập với chương trình chính! 04/08/2007 11:42:40 (+0700) | #11 | 76692
[Avatar]
le_quoc_bao
Member

[Minus]    0    [Plus]
Joined: 25/07/2007 12:01:48
Messages: 15
Location: Unknown
Offline
[Profile] [PM]
Bạn có thể xem cuốn lập trình c của phạm van ất, quấn ấy có bài nói về cách lập trình theo thời gian thực.đây là trích dẫn:
time_hien_tai=getime_hien_tai(..);//lấy thời gian hiện tại
while(1){
time_hien_tai=gettime_hien_tai(.);//lấy lại thời gian hiệntại
if(time_hien_tai>=time_quy_dinh){//nếu thời gian hiện tại
//đạt tới mức quy định thì
time_hien_tai=gettime_hien_tai(..);
..............;//làm 1 diều gì đó 1
..............;//làm 1 diều gì đó 2
}
else{
.........;//thực hiện 1 lệnh khác
........;
}
}

Mình cảm ơn maihoahn về đoạn code mà bạn hướng dẫn nhưng mà maihoahn ơi! Đoạn code đó vẫn không ổn ở chổ khi chương trình chính quét tới "thực hiện 1 lệnh khác" là 1 lệnh dừng chờ người dùng nhập thông số hay xác nhận một thông tin chẳng hạn. Nếu người dùng không nhập hoặc không có 1 action nào hết thì chương trình sẽ đứng mãi mãi vì khi đó vòng while bên trên chưa được tái lặp mặc dù thời gian hiện tại đã quá thời gian qui định.
[Up] [Print Copy]
  [Question]   Thực thi lệnh trong C độc lập với chương trình chính! 04/08/2007 14:12:14 (+0700) | #12 | 76735
APlaceForMyHead
Member

[Minus]    0    [Plus]
Joined: 03/08/2007 10:01:21
Messages: 18
Offline
[Profile] [PM]
Hồi xưa mình nhớ học lập trình song song mình spawn cái thread con ra cũng dễ lắm mà. gcc trên unix smilie

Giờ xài VB mấy cái vụ này đơn giản hơn hồi xưa nữa.

Bác nào xúi xài irq thế, giờ này mà kiếm được người code được mấy cái irq đó hơi bị khó.

Nhưng mà C với DOS thì hình như chỉ có cách này.
[Up] [Print Copy]
  [Question]   Thực thi lệnh trong C độc lập với chương trình chính! 07/08/2007 22:19:05 (+0700) | #13 | 77554
[Avatar]
eyesdog
Elite Member

[Minus]    0    [Plus]
Joined: 18/01/2002 06:54:01
Messages: 94
Offline
[Profile] [PM]
Bạn có thể tham khảo trong link http://www.diendantinhoc.com/lofiversion/index.php/t30115.html
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|